none
Como saber si pulsan Cancelar en un InputBox RRS feed

  • Pregunta

  • Necesito saber cuando en una ventada InputBox me pulsan el botón "Aceptar" o "Cancelar".

    Las pruebas que he estado haciendo, he visto que cuando me pulsan "Cancelar" siempre me devuelve una cadena vacía, pero puede ocurrir que le den "Aceptar" sin introducir datos, entonces en los dos casos me va a devolver una cadena vacía y necesito saber si fue desde "Aceptar" (para actualizar a vació un campo) o si fue desde "Cancelar" (para no hacer nada).

    He estado mirando la documentación de MSDN y no he visto solución.

    Gracias.

    jueves, 12 de mayo de 2016 7:40

Respuestas

  • "PGF_MSDN" escribió:

    > Las pruebas que he estado haciendo, he visto que cuando me pulsan "Cancelar"
    > siempre me devuelve una cadena vacía, pero puede ocurrir que le den "Aceptar"
    > sin introducir datos, entonces en los dos casos me va a devolver una cadena
    > vacía y necesito saber si fue desde "Aceptar" (para actualizar a vació un campo)
    > o si fue desde "Cancelar" (para no hacer nada).
    >

    Hola:

    Que yo sepa no hay manera de conocer si se ha pulsado el botón Aceptar o Cancelar en el cuadro de diálogo que muestra la clásica función InputBox de Visual Basic, ya que ésta lo único que devuelve es un valor alfanumérico con el contenido escrito en el cuadro de texto.

    En lugar de intentar averiguar si el usuario ha pulsado el botón Aceptar o Cancelar, entiendo que lo que tienes que hacer es verificar si el valor devuelto por la función es o no una cadena de longitud cero. Si no es una cadena de longitud cero, actualizas el valor de ese campo, y si es una cadena de longitud cero (con independencia del botón que el usuario haya pulsado), no haces nada.

    Más o menos este sería el esquema:

        Dim resultado As String = InputBox(...)
    
        If (resultado = String.Empty) Then
           ' No hacer nada. Si procede, abandonar el procedimiento
           ' donde actualmente se esté ejecutando el código.
           '
           Return
        End If
    
        ' El valor de la variable 'resultado' no es una cadena de longitu cero.
        '
        ' Ejecutar lo que proceda.
        '

    Por supuesto, también puedes diseñar un formulario cualquiera para que actúe de función "InputBox" personalizada y controlar qué botón es el que ha pulsado el usuario, pero desde luego, para lo que dices que deseas hacer, entiendo que es más que suficiente con la solución que te he comentado. ;-)

    Un saludo

    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    jueves, 12 de mayo de 2016 8:53
    Moderador

Todas las respuestas

  • "PGF_MSDN" escribió:

    > Las pruebas que he estado haciendo, he visto que cuando me pulsan "Cancelar"
    > siempre me devuelve una cadena vacía, pero puede ocurrir que le den "Aceptar"
    > sin introducir datos, entonces en los dos casos me va a devolver una cadena
    > vacía y necesito saber si fue desde "Aceptar" (para actualizar a vació un campo)
    > o si fue desde "Cancelar" (para no hacer nada).
    >

    Hola:

    Que yo sepa no hay manera de conocer si se ha pulsado el botón Aceptar o Cancelar en el cuadro de diálogo que muestra la clásica función InputBox de Visual Basic, ya que ésta lo único que devuelve es un valor alfanumérico con el contenido escrito en el cuadro de texto.

    En lugar de intentar averiguar si el usuario ha pulsado el botón Aceptar o Cancelar, entiendo que lo que tienes que hacer es verificar si el valor devuelto por la función es o no una cadena de longitud cero. Si no es una cadena de longitud cero, actualizas el valor de ese campo, y si es una cadena de longitud cero (con independencia del botón que el usuario haya pulsado), no haces nada.

    Más o menos este sería el esquema:

        Dim resultado As String = InputBox(...)
    
        If (resultado = String.Empty) Then
           ' No hacer nada. Si procede, abandonar el procedimiento
           ' donde actualmente se esté ejecutando el código.
           '
           Return
        End If
    
        ' El valor de la variable 'resultado' no es una cadena de longitu cero.
        '
        ' Ejecutar lo que proceda.
        '

    Por supuesto, también puedes diseñar un formulario cualquiera para que actúe de función "InputBox" personalizada y controlar qué botón es el que ha pulsado el usuario, pero desde luego, para lo que dices que deseas hacer, entiendo que es más que suficiente con la solución que te he comentado. ;-)

    Un saludo

    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    jueves, 12 de mayo de 2016 8:53
    Moderador
  • Me he declinado por crear un nuevo form, que simule el InputBox, ya que el InputBox no me sirve porque necesito actualizar aunque la cadena se vacía.

    Gracias.

    viernes, 13 de mayo de 2016 6:37