Hola a todos, estoy desarrollando una aplicacion relativamente sencilla pero hay un while que no me responde como yo espero, el código es este:
Dim respuesta As Char
respuesta = UCase(InputBox("¿Desea eliminar la clave definitivamente? S=Elimina definitivamente la clave. N=Elimina solo la marca de esa clave", "Responda S ó N"))
While (respuesta <> "S" Or respuesta <> "N")
respuesta = UCase(InputBox("Respuesta no aceptada. ¿Desea eliminar la clave definitivamente? S=Elimina definitivamente la clave. N=Elimina solo la marca de esa clave"))
If respuesta = Nothing Then
Eliminar.Enabled = False
id_prd.Text = Nothing
descripcion.Text = Nothing
id_cat.Text = Nothing
marca.Text = Nothing
existencia.Text = Nothing
p_lista.Text = Nothing
id_prd.Focus()
MsgBox("Baja de artículo cancelada.", MsgBoxStyle.Exclamation)
Exit While
End If
End While
El problema es que se supone que si el usuario ingresa S o N el while deberia terminar y pasar a la siguiente sentencia de control que es un IF, sin embargo aun poniendo la S o la N el while no termina, ya he probado pasando msgboxes en el while para ver que la variable reciba correctamente el parametro y efectivamente el msgbox me devuelv S o N asi que no se que pueda ser ya le di vueltas y no se que pueda ser ... ayuda por favor.
Porque te complicas tanto con un blucle, cuando puedes revisar el valor devuelto por un Msgbox...
If MsgBox("¿Desea eliminar la clave definitivamente?", MsgBoxStyle.YesNo, "Eliminar Clave") = MsgBoxResult.Yes Then
''Evento si se responde si
Else
''Evento si se responde no
End If
porque exactamente no entendia muy bien como hacer eso que pones ... gracias!!!!!!!!
Además de que para el bucle while debes de utilizar una bandera ... el while no realiza las operaciones/comparaciones que hace el if .. así que no puedes usar un OR
Por lo demás... ya tienes tu respuesta
Saludos
Se puede utilizar cualquier operador comparativo en un while y tambien operadores logicos(OR , AND, NOT) ya que la condicion que evalua es un booleano, asi que el problema estuvo en la condicion:
While (respuesta <> "S" Or respuesta <> "N")
esta condicion siempre va a devolver un TRUE ya que el OR siempre va a tomar por verdadera si una de las condiciones se cumple
asi que
si respuesta = "A"
respuesta es diferente de S y respuesta es diferente de N por tanto devuelve TRUE
si respuesta = "S"
respuesta no es diferente de y respuesta si es diferente de N por tanto tambien devuelve TRUE
si respuesta = "N"
repuesta es diferente de S y respuesta no es diferente de N por tanto devuelve TRUE
en conclusion, no importa que contenga la variable respuesta la condicion siempre sera true y el bucle sera infinito.
Esto lo digo solo a modo de comentario, ya que como dijeron antes este bucle es inecesario.