una - visual studio c# community
diálogo personalizado con un campo de texto en winmobile (3)
Estoy buscando tener un cuadro de diálogo personalizado simple, como un cuadro de mensaje, que tenga una etiqueta y un TextBox. Si hay una manera simple de hacer esto, lo siento! Realmente no estoy muy versado en las cosas del diálogo.
¡Gracias por cualquier ayuda chicos!
Si quieres una solución súper simple pero fea, puedes incluir una referencia en tu proyecto en Microsoft.VisualBasic, que te permite usar la función VB InputBox de esta manera:
string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text",
"title text", "default value", 0, 0);
El diálogo ocupa toda la pantalla, pero es fácil de usar. Pero es increíblemente feo, como mencioné.
Supongo que básicamente quieres un cuadro de diálogo personalizado que devuelva una cadena ingresada por el usuario. Una forma es agregar una referencia a Microsoft.VisualBasic a su proyecto, que le da acceso al método InputBox, que básicamente es un cuadro de mensaje con un cuadro de texto. Pero eso no es divertido y no estoy seguro de que funcione en un teléfono inteligente de todos modos.
Para lanzar el suyo, simplemente agregue un formulario (llamado CustomDialog) a su proyecto y arrastre un cuadro de texto (textBox1), una etiqueta (label1) y un botón (etiquetado como "OK") en él.
Para establecer el texto de la etiqueta, agregue un parámetro al constructor del formulario de la siguiente manera:
public CustomDialog(string textCaption)
{
label1.Text = textCaption;
}
Para exponer el texto ingresado a la persona que llama, agregue este código al formulario:
public override string Text
{
get
{
return textBox1.Text;
}
}
En el evento de clic del botón Aceptar, coloca este código:
this.DialogResult = DialogResult.OK; // this will close the form, too
Para usar este diálogo desde su formulario principal, cree una instancia de este formulario, muéstrelo, verifique que se haya hecho clic en el botón Aceptar, y luego lea su propiedad de Texto (que devuelve lo que el usuario ingresó) así:
using (CustomDialog dialog = new CustomDialog("What is your name"))
{
if (dialog.ShowDialog(this) == DialogResult.OK)
{
string enteredText = dialog.Text;
}
}
Puedes ser más elegante, pero esos son los conceptos básicos.
Aquí se explica cómo crear un pequeño cuadro de diálogo personalizado en Windows Mobile que se ve así:
texto alternativo http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg
Agregue un formulario a su proyecto y establezca su propiedad FormBorderStyle en Ninguno. Esto permite redimensionar y posicionar el formulario, pero también significa que no tiene borde ni barra de título, y no hay forma de que el usuario lo mueva.
Entonces tienes que fingir los tres. La forma más fácil de falsificar el borde y la barra de título es hacer el BackColor de su forma SystemColors.WindowFrame, luego coloque una etiqueta (donde dice "Dialog" en la imagen) con BackColor = SystemColors.Highlight and ForeColor = SystemColor.HighlightText (y audaz la fuente), luego coloque un panel con BackColor = SystemColors.Window donde vea blanco en la imagen. Debe ajustar las posiciones y los tamaños de la etiqueta y el panel para que tenga un borde de 1 píxel (que es solo el BackColor de su formulario que se muestra).
Para permitir que el formulario sea arrastrado por su barra de título falsa, agregue este código al formulario (y, por supuesto, también debe conectar los eventos):
private bool _Moving = false;
private Point _Offset;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
_Moving = true;
_Offset = new Point(e.X, e.Y);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (_Moving)
{
Point newlocation = this.Location;
newlocation.X += e.X - _Offset.X;
newlocation.Y += e.Y - _Offset.Y;
this.Location = newlocation;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (_Moving)
{
_Moving = false;
}
}
Otro problema es que debido a que no hay una barra de título real, no hay forma de que el usuario cierre el formulario. Debe agregar un botón Aceptar (o Cerrar) y colocarlo en el evento Click del botón:
this.DialogResult = DialogResult.OK;
Normalmente, usaría el evento del mouse en la barra de título para facilitar el arrastre, pero el control de etiqueta no tiene ningún evento de mouse. Con este código, puedes tomar cualquier parte del formulario y arrastrarlo, excepto que el panel lo bloquea y hace que la barra de título sea el único lugar donde tomar y arrastrar.
Mi otra respuesta tiene más detalles sobre cómo recuperar información de los cuadros de diálogo personalizados.
Actualización: en realidad, no hay una forma obvia de cerrar un formulario sin bordes sin agregar su propio botón Aceptar. Siempre que no establezca la propiedad ControlBox de su formulario en False, el botón Aceptar o X en la esquina superior derecha de la pantalla Hoy cerrará su cuadro de diálogo, incluso si no se ve como lo hará, ya que no está realmente en el formar.