Estoy usando System.Windows.Forms
pero curiosamente no tengo la capacidad para crearlos.
¿Cómo puedo obtener algo como un cuadro de diálogo de solicitud de JavaScript, sin JavaScript?
MessageBox es bueno, pero no hay forma de que el usuario ingrese una entrada.
Quiero que el usuario ingrese cualquier entrada de texto posible.
Respuestas:
Debe crear su propio cuadro de diálogo de solicitud. Quizás podrías crear una clase para esto.
Y llamándolo:
Actualización :
Se agregó el botón predeterminado ( tecla Intro ) y el enfoque inicial basado en comentarios y otra pregunta .
fuente
Agregue una referencia
Microsoft.VisualBasic
y use esto en su código C #:Para agregar la referencia: haga clic con el botón derecho en las Referencias en la ventana del Explorador de proyectos, luego en Agregar referencia y verifique VisualBasic en esa lista.
fuente
Interaction
que no existe en el espacio de nombresMicrosoft.VisualBasic
No existe tal cosa de forma nativa en Windows Forms.
Tienes que crear tu propio formulario para eso o:
utilizar la
Microsoft.VisualBasic
referencia.Inputbox es un código heredado introducido en .Net para compatibilidad con VB6, por lo que le aconsejo que no lo haga.
fuente
Microsoft.VisualBasic.Compatibility
espacio de nombres.Microsoft.VisualBasic
es más un conjunto de bibliotecas auxiliares sobre .Net y no es realmente específico de VB en absoluto.Por lo general, no es una buena idea importar las bibliotecas de VisualBasic en programas de C # (no porque no funcionen, sino solo por compatibilidad, estilo y capacidad de actualización), pero puede llamar a Microsoft.VisualBasic.Interaction.InputBox () para mostrar el tipo de cuadro que está buscando.
Si puede crear un objeto Windows.Forms, sería mejor, pero dice que no puede hacerlo.
fuente
VisualBasic
, pero eso es solo en su cabeza. No hay realidad en ese sentimiento. También se llamaríaMicrosoft.MakeMyLifeEasierWithAlreadyImplementedMethods
espacio de nombres.Microsoft.VisualBasic.Compatibility
sub-espacio de nombres, no todo. En elMicrosoft.VisualBasic
espacio de nombres se incluyen muchas funciones "básicas" ; no va a ninguna parte. Microsoft ha amenazado con "suspender" VB 6, no VB.NET. Han prometido repetidamente que no irá a ninguna parte. Algunas personas todavía no parecen haber descubierto la diferencia ...Otra forma de hacer esto: suponiendo que tenga un tipo de entrada TextBox, cree un formulario y tenga el valor del cuadro de texto como una propiedad pública.
En el formulario principal, este será el código:
;
De esta manera, el código se ve más limpio:
fuente
La respuesta de Bas puede causarle problemas de memoria teóricamente, ya que ShowDialog no se eliminará. Creo que esta es una forma más adecuada. También mencione que textLabel es legible con texto más largo.
Implementación:
fuente
prompt
es nulo en ese punto. Una solución simple para permitir la cancelación del mensaje es reemplazarprompt.Dispose();
dentro depublic void Dispose()
conif (prompt != null) { prompt.Dispose(); }
Basado en el trabajo de Bas Brekelmans anterior, también he creado dos derivaciones -> cuadros de diálogo de "entrada" que le permiten recibir del usuario tanto un valor de texto como un booleano (TextBox y CheckBox):
... y texto junto con una selección de una de las múltiples opciones (TextBox y ComboBox):
Ambos requieren los mismos usos:
Llámalos así:
Llámalos así:
fuente
La respuesta de Bas Brekelmans es muy elegante en su simplicidad. Pero descubrí que para una aplicación real se necesita un poco más, como:
La clase aquí maneja estas limitaciones: http://www.codeproject.com/Articles/31315/Getting-User-Input-With-Dialogs-Part-1
Acabo de descargar la fuente y copié InputBox.cs en mi proyecto.
Sin embargo, me sorprende que no haya algo mejor ... Mi única queja real es que el texto de los subtítulos no admite nuevas líneas ya que usa un control de etiqueta.
fuente
Desafortunadamente, C # todavía no ofrece esta capacidad en las bibliotecas integradas. La mejor solución en la actualidad es crear una clase personalizada con un método que muestre un formulario pequeño. Si está trabajando en Visual Studio, puede hacer esto haciendo clic en Proyecto> Agregar clase
Elementos de Visual C #> código> clase
Nombre la clase PopUpBox (puede cambiarle el nombre más tarde si lo desea) y pegue el siguiente código:
Deberá cambiar el espacio de nombres a lo que esté usando. El método devuelve una cadena, así que aquí tienes un ejemplo de cómo implementarlo en tu método de llamada:
Este método comprueba la cadena devuelta en busca de un valor de texto, cadena vacía o "cancelar" (el método getUserInput devuelve "cancelar" si se hace clic en el botón cancelar) y actúa en consecuencia. Si el usuario no ingresó nada y hizo clic en Aceptar, le dirá al usuario y le preguntará si desea cancelar o volver a ingresar su texto.
Notas de publicación: En mi propia implementación, encontré que a todas las otras respuestas les faltaba 1 o más de las siguientes:
Por lo tanto, he publicado mi propia solución. Espero que alguien lo encuentre útil. Gracias a los comentaristas de Bas y Gideon + por sus contribuciones, ¡me ayudaron a encontrar una solución viable!
fuente
aquí está mi versión refactorizada que acepta multilínea / única como opción
fuente
Aquí hay un ejemplo en VB.NET
fuente