¿Qué tal si asignas ToolTip
a TextBox
y pones toda la "conversación para qué es el cuadro de texto" dentro de eso?
Simplemente arrastre & baje ToolTip
dentro del formulario. Y luego, en cada propiedad TextBox
, debe tener una entrada adicional en la sección Miscelánea ToolTip
en toolTip1
(o lo que sea, su nombre será si le cambia el nombre).
Luego, cuando el usuario pasa el cursor sobre TextBox
(Solo lectura/Desactivado TextBox
no parece mostrar información sobre herramientas) y se detiene allí durante 1 segundo La información sobre herramientas debe mostrarse con la información adecuada.
Eventualmente puede o mejor aún tiene un Label
junto a TextBox
es decir lo es, pero tener un ToolTip
es también una buena idea explicar más información al usuario a través de eso.
Para hacer cosas con WaterMark para que no tenga que recorrer un largo camino configurando los eventos, cuidando SelectAll etc., podría hacerlo así. Cree un nuevo archivo watermark.cs y reemplácelo con este código. Asegúrese de haber cambiado el espacio de nombres para que coincida con el espacio de nombres de su programa.
#region
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
#endregion
namespace Watermark {
public static class TextBoxWatermarkExtensionMethod {
private const uint ECM_FIRST = 0x1500;
private const uint EM_SETCUEBANNER = ECM_FIRST + 1;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
public static void SetWatermark(this TextBox textBox, string watermarkText) {
SendMessage(textBox.Handle, EM_SETCUEBANNER, 0, watermarkText);
}
}
}
internal class WatermarkTextBox : TextBox {
private const uint ECM_FIRST = 0x1500;
private const uint EM_SETCUEBANNER = ECM_FIRST + 1;
private string watermarkText;
public string WatermarkText {
get { return watermarkText; }
set {
watermarkText = value;
SetWatermark(watermarkText);
}
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
private void SetWatermark(string watermarkText) {
SendMessage(Handle, EM_SETCUEBANNER, 0, watermarkText);
}
}
En su Formulario de activar así:
textBoxYourWhatever.SetWatermark("Text that should display");
Se queda allí mientras la TextBox
está vacía. Cuando los usuarios entran en TextBox
, el texto desaparece. Aparece de nuevo cuando se limpia TextBox
(ya sea por el usuario o automáticamente). No hay necesidad de eventos especiales, etc.
EDIT:
He añadido también WaterMarkTextBox clase interna que le da la opción de utilizar simplemente WaterMarkTexBox nueva que esté disponible en Designer. Luego arrástralo y suéltalo a tu diseñador y úsalo. Se comporta como el cuadro de texto normal solo le da campo adicional WaterMarkText.
Sigo prefiriendo el primer método. No te hace reconstruir tu GUI nuevamente.
Si ha probado dos soluciones ... la segunda * debería * haber funcionado ... podría ser un error en el código. ¿Podría proporcionar el código que realmente utilizó? – Nick
Publiqué el código. Avísame si es suficiente para continuar. – Slateboard
¿Alguna solución lo ayudó con lo que quería lograr? – MadBoy