none
Obviar el nombre de un TEXTBOX. RRS feed

  • Pregunta

  • Hola a todos,

    tengo un problema con un case, tengo varios textbox unos 50. Los nombres de los textbox són los mismo cambiando un numero. Por ejemplo:

    INT32_1, INT32_2, F32_1, F32_2, F32_3...

    Tengo un if que recorre los textbox y un case para que en caso de que el textbox tenga un nombre concreto me guarde el valor del textbox como un tipo de variable u otra...:

     ElseIf (TypeOf GBox Is GroupBox) And (GBox.Name IsNot "UnidadesBox") Then
                            For Each ctrl As Control In GBox.Controls
                                If TypeOf ctrl Is TextBox Then
                                    Select Case ctrl.Name
                                        Case "F32_*"
                                            FByte = Convert.ToSingle(ctrl)
                                            byteArray = BitConverter.GetBytes(FByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)
                                        Case "INT16_*"
                                            TwoByte = Convert.ToUInt16(ctrl)
                                            byteArray = BitConverter.GetBytes(TwoByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)
                                        Case "INT32_*"
                                            IntByte = Convert.ToUInt32(ctrl)
                                            byteArray = BitConverter.GetBytes(IntByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)

    ....

    Mi pregunta es como puedo hacer que que obvie el número, como veis he puesto el * pero no sirve para nada... Quiero que si por ejemplo el nombre es INT32_1 me entre en la rutina del case si tener que poner el nombre entero ya que sino seria una locura. 

    Muchas gracias.

    Saludos. 

    miércoles, 18 de mayo de 2016 15:52

Respuestas

  • En lugar de hacer el select por el nombre puedes obtener el tipo :

    For Each ctrl As Control In GBox.Controls
            If TypeOf ctrl Is TextBox Then
    Dim Nombre as String = ctrl.Name
            Dim Tipo As String = Nombre.Substring(0, InStr(Nombre, "_") ).ToUpper

                                    Select Case Tipo
                                        Case "F32_"
                                            FByte = Convert.ToSingle(ctrl)
                                            byteArray = BitConverter.GetBytes(FByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)
                                        Case "INT16_"
                                            TwoByte = Convert.ToUInt16(ctrl)
                                            byteArray = BitConverter.GetBytes(TwoByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)
                                        Case "INT32_"
                                            IntByte = Convert.ToUInt32(ctrl)
                                            byteArray = BitConverter.GetBytes(IntByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)


    Saludos, Javier J


    miércoles, 18 de mayo de 2016 16:10
  • Hola,

    Puedes usar el StartWith(), para saber con que empieza el nombre.

             If TypeOf ctrl Is TextBox Then
                    Select Case True
                        Case ctrl.Name.StartsWith("F32_")
                            MessageBox.Show("El nombre comienza con F32_")
                        Case ctrl.Name.StartsWith("INT16_")
                            MessageBox.Show("El nombre comienza con INT16_")
                        Case ctrl.Name.StartsWith("INT32_")
                            MessageBox.Show("l nombre comienza con INT32_")
                    End Select
                End If

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 18 de mayo de 2016 16:23

Todas las respuestas

  • En lugar de hacer el select por el nombre puedes obtener el tipo :

    For Each ctrl As Control In GBox.Controls
            If TypeOf ctrl Is TextBox Then
    Dim Nombre as String = ctrl.Name
            Dim Tipo As String = Nombre.Substring(0, InStr(Nombre, "_") ).ToUpper

                                    Select Case Tipo
                                        Case "F32_"
                                            FByte = Convert.ToSingle(ctrl)
                                            byteArray = BitConverter.GetBytes(FByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)
                                        Case "INT16_"
                                            TwoByte = Convert.ToUInt16(ctrl)
                                            byteArray = BitConverter.GetBytes(TwoByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)
                                        Case "INT32_"
                                            IntByte = Convert.ToUInt32(ctrl)
                                            byteArray = BitConverter.GetBytes(IntByte)
                                            'MsgBox(result)
                                            'SPort.Write((ctrlU.Text + 128))
                                            SPort.Write(byteArray, 0, 1)


    Saludos, Javier J


    miércoles, 18 de mayo de 2016 16:10
  • Hola,

    Puedes usar el StartWith(), para saber con que empieza el nombre.

             If TypeOf ctrl Is TextBox Then
                    Select Case True
                        Case ctrl.Name.StartsWith("F32_")
                            MessageBox.Show("El nombre comienza con F32_")
                        Case ctrl.Name.StartsWith("INT16_")
                            MessageBox.Show("El nombre comienza con INT16_")
                        Case ctrl.Name.StartsWith("INT32_")
                            MessageBox.Show("l nombre comienza con INT32_")
                    End Select
                End If

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 18 de mayo de 2016 16:23
  • Muchas gracias a los dos! 

    En este caso he utilizado la solución que me ha dado Javier y me ha funcionado perfectamente. 

    Saludos.

    Miguel.

    jueves, 19 de mayo de 2016 14:26