¿Cómo llene un cuadro de texto vacío con texto predeterminado?

¿Cómo llene un cuadro de texto con texto si está vacío? Estoy usando VB.NET.

Parece que está describiendo un cartel de aviso, que es texto rápido que se muestra en un cuadro de texto vacío. A partir de Windows XP, esta funcionalidad es compatible de forma nativa con el sistema operativo. El efecto logrado haciéndolo de esta manera es mucho más elegante que establecer el texto predeterminado usted mismo en el evento TextChanged . Se parece a esto:

muestra de cuadro de texto con texto de banner de cue

La configuración de esto se realiza a nivel de la API de Windows al enviar el control de cuadro de texto un mensaje EM_SETCUEBANNER . Para usar esto desde un proyecto .NET, tendrá que usar P / Invoke.

Afortunadamente, la mayor parte del trabajo ya se ha hecho por usted. Este proyecto de muestra es una forma rápida e indolora de agregar soporte de señal de entrada a un proyecto existente. Aquí hay otra muestra , con una explicación más completa del proceso.

Si no desea que su aplicación dependa de una DLL externa, puede agregar el código necesario directamente a su proyecto. La forma más simple es subclasificar el TextBox existente de TextBox y agregar el código para admitir banners de referencia allí. Vea esta respuesta para el código que necesitará. Si tiene problemas para convertirlo a VB.NET, pruebe esta herramienta .

Probablemente desee manejar el evento TextChanged y establecer algún texto predeterminado si el cuadro de texto está vacío cuando se dispara el evento.

No tengo un ejemplo de VB.NET, pero el siguiente C # debería ser demasiado difícil de entender:

 public Form1() { this.InitializeComponent(); textBox1.Tag = "Default text"; textBox1.Text = (string)textBox1.Tag; textBox1.TextChanged += new EventHandler(OnTextChanged); } void OnTextChanged(object sender, EventArgs e) { var textbox = (TextBox)sender; if (string.IsNullOrEmpty(textbox.Text)) { textbox.Text = (string)textbox.Tag; } } 

Y el controlador de eventos se puede reutilizar para varios cuadros de texto.

EDITAR: Aquí es más o menos lo mismo en VB.NET

 Sub New() ' This call is required by the designer. InitializeComponent() TextBox1.Tag = "Default text" ' This can be set with the designer TextBox1.Text = CStr(TextBox1.Tag) End Sub Private Sub OnTextBoxTextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged Dim textbox As TextBox = DirectCast(sender, TextBox) If String.IsNullOrEmpty(textbox.Text) Then textbox.Text = CStr(textbox.Tag) textbox.SelectAll() End If End Sub 

Por supuesto, también puede lograr un comportamiento similar con la funcionalidad nativa de Windows, pero unas pocas líneas de código administrado le proporcionarán casi todo lo que necesita, incluso si no desea usar Win32.

manejo de texto predeterminado en un cuadro de texto

 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Text = "Default Text" ' initialize the text box End Sub 

borrar el texto cuando el cursor está en el cuadro de texto

 Private Sub TextBox1_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1_GotFocus TextBox1.Text = "" ' clear the text box for typing End Sub 

Si el cuadro de texto permanece vacío después de que los datos cambian, el texto predeterminado vuelve a aparecer

 Private Sub TextBox1_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1_LostFocus TextBox1.Text = "" ' clear the text box for typing End Sub 

¿Estás buscando algo así?

 If Textbox.Text = string.Empty Then TextBox.Text = "Default Text" End If 

Crearía una clase que hereda TextBox y haría dos cosas con ella:

  • Agregar propiedad de cadena DefaultText
  • Reemplazar el ajustador de texto para establecer siempre este DefaultText si el nuevo valor de texto es String.Empty

Supongo que quisiste agregar texto desde la página aspx.

  

Incluso cuando .NET no sugiere esta característica en el texto inteligente, supongo que le permitirá colocar cualquier atributo, incluso personalizado, que le permita manipular datos. Pero, hace el trabajo. y el atributo de valor se envía al navegador, por lo tanto, inicie en el campo de texto.

Para TextArea (TextMode = "MultiLine"), puede colocar entre las tags.

 Text Here will be inside the TextArea 

Es como el comportamiento de la etiqueta html textarea.