Che ne dici di assegnare ToolTip
a TextBox
e mettere tutto il "parlare di quale casella di testo è per" al suo interno?
Basta trascinare & rilasciare ToolTip
all'interno del modulo. E poi in ogni proprietà dovresti avere una voce aggiuntiva nella sezione Misc ToolTip
su toolTip1
(o qualunque sia il suo nome se la rinomassi).
Quindi quando l'utente passa sopra TextBox
(Sola lettura/Disabilitato TextBox
sembra non visualizzare le descrizioni) e si ferma lì per 1 secondo che ToolTip dovrebbe mostrare con le informazioni corrette.
È alla fine o, meglio ancora possibile avere un Label
accanto al TextBox
dire ciò che è è, ma avere un ToolTip
è anche una buona idea per spiegare ulteriori informazioni all'utente attraverso questo.
Per fare cose con WaterMark in modo da non dover percorrere la strada impostando gli eventi, avendo cura di SelectAll ecc. Si potrebbe fare così. Crea un nuovo file watermark.cs e sostituiscilo con questo codice. Assicurati di aver cambiato lo spazio dei nomi in modo che corrisponda al tuo spazio dei nomi del programma.
#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);
}
}
nel modulo si attiva in questo modo:
textBoxYourWhatever.SetWatermark("Text that should display");
rimane lì il più a lungo il TextBox
è vuoto. Quando gli utenti entrano nel testo TextBox
scompaiono. Appare nuovamente quando viene pulito TextBox
(dall'utente o automaticamente). Non c'è bisogno di tutti gli eventi speciali, ecc
EDIT:
ho aggiunto anche di classe WaterMarkTextBox interno che ti dà la possibilità di usare semplicemente nuova WaterMarkTexBox che diventa disponibile in Designer. Quindi trascinalo sul tuo designer e usalo. Si comporta come una normale casella di testo e ti fornisce un campo aggiuntivo WaterMarkText.
Preferisco ancora il primo metodo. Non ti fa ricostruire di nuovo il tuo gui.
Se hai provato due soluzioni ... il secondo * dovrebbe * aver funzionato ... potrebbe essere un bug nel codice. Potresti fornire il codice che hai effettivamente utilizzato? – Nick
Ho pubblicato il codice. Fammi sapere se è abbastanza per andare avanti. – Slateboard
Quindi qualsiasi soluzione ti ha aiutato con quello che volevi ottenere? – MadBoy