none
Función que compara cadenas y regresa una letra RRS feed

  • Pregunta

  • Hola a todos, hoy traigo una inquietud y espero me puedan ayudar. estoy trabajando en vb con un formulario y tengo unos combo box, básicamente uno tiene dos opciones, kilobytes y megabytes y el otro minutos, horas y dias, lo que estoy tratando de hacer es una función que me compare la propiedad text del combobox con una cadena y me devuelva una letra ya que esa la ocupare para almacenarla en un archivo de texto mi código es el siguiente...

        Public Function Comparar_tiempo(ByVal medida As String) As String
            If String.Compare(medida, "minutos") Then
                unit = "m"
            ElseIf String.Compare(medida, "horas") Then
                unit = "h"
            Else ' medida.CompareTo("Días")
                unit = "d"
            End If
            'Exit Function
        End Function

    al ejecutar el programa me manda un mensaje de error diciéndome 'la conversion de la cadena "" en el tipo boolean no es valida'

    • Editado danielneria martes, 19 de abril de 2016 17:27
    martes, 19 de abril de 2016 17:25

Respuestas

  • Hola,

    arr(1) = NumericUpDown2.Value & Unidad = Microsoft.VisualBasic.Left(ComboBox1.Text, 1) & "/" & NumericUpDown3.Value & Unidad = Microsoft.VisualBasic.Left(ComboBox2.Text, 1)

    No puedes poner "=" al asignar valores concatenados.

    Además puedes usar :

    Unidad = ComboBox1.Text.Substring(0, 1)

    Si vas a concatenar el resultado, te quedaría así :

    arr(1) = NumericUpDown2.Value & Unidad & ComboBox1.Text.Substring(0, 1) & "/" & NumericUpDown3.Value & Unidad & ComboBox2.Text.Substring(0, 1)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    martes, 19 de abril de 2016 18:26

Todas las respuestas

  • Hola,

    Hola, el String.Compare devuelve un valor entero, dependiendo del resultado, aquí puedes ver la documentación.

    Puedes usar también otras validaciones.

            If medida = "minutos" Then
                unit = "m"
            End If
    
            If medida.Equals("minutos") Then
                unit = "m"
            End If
    
            If medida.Contains("minutos") Then
                unit = "m"
            End If
    
            If String.Compare(medida, "minutos") = 0 Then
                unit = "m"
            End If

    Y puedes agruparlos en un Case para un mayor orden.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 19 de abril de 2016 17:49

  • Lo he intentado con esta otra instrucción, que me saca la primera letra de la propiedad text del combobox y si lo hace, lo corroboro con los mensajes, pero cuando lo quiero concatenar en el arreglo, es cuando me sale el error y no se por qué

    Unidad = Microsoft.VisualBasic.Left(ComboBox1.Text, 1)
                MsgBox(Unidad)
                Unidad = Microsoft.VisualBasic.Left(ComboBox2.Text, 1)
                MsgBox(Unidad)
                Unidad = Microsoft.VisualBasic.Left(ComboBox3.Text, 1)
                MsgBox(Unidad)

    arr(1) = NumericUpDown2.Value & Unidad = Microsoft.VisualBasic.Left(ComboBox1.Text, 1) & "/" & NumericUpDown3.Value & Unidad = Microsoft.VisualBasic.Left(ComboBox2.Text, 1)

     
    martes, 19 de abril de 2016 18:15
  • Hola,

    arr(1) = NumericUpDown2.Value & Unidad = Microsoft.VisualBasic.Left(ComboBox1.Text, 1) & "/" & NumericUpDown3.Value & Unidad = Microsoft.VisualBasic.Left(ComboBox2.Text, 1)

    No puedes poner "=" al asignar valores concatenados.

    Además puedes usar :

    Unidad = ComboBox1.Text.Substring(0, 1)

    Si vas a concatenar el resultado, te quedaría así :

    arr(1) = NumericUpDown2.Value & Unidad & ComboBox1.Text.Substring(0, 1) & "/" & NumericUpDown3.Value & Unidad & ComboBox2.Text.Substring(0, 1)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    martes, 19 de abril de 2016 18:26
  • Gracias, me fue de utilidad la ayuda, así todo funciona a la perfección.

    Saludos

    martes, 19 de abril de 2016 19:41