Que diriez-vous d'attribuer ToolTip
à TextBox
et de mettre tous les "parler quoi textbox est pour" à l'intérieur de cela? Il suffit de faire glisser & déposer ToolTip
à l'intérieur du formulaire Et puis dans chaque TextBox
propriétés, vous devriez avoir une entrée supplémentaire dans la section Misc ToolTip
sur toolTip1
(ou quel que soit son nom sera si vous le renommez).
Ensuite, lorsque l'utilisateur survole TextBox
(lecture seule/désactivé TextBox
ne semble pas afficher les info-bulles) et s'arrête là pendant 1 seconde ToolTip devrait montrer avec les informations appropriées.
Vous pouvez éventuellement ou même mieux d'avoir un Label
à côté de TextBox
dire ce qui est est, mais ayant un ToolTip
est aussi une bonne idée d'expliquer plus d'informations à l'utilisateur à travers cela.
Pour faire des choses avec WaterMark afin de ne pas avoir à aller loin en définissant les événements, en prenant soin de SelectAll etc, vous pouvez le faire comme ça. Créez un nouveau fichier watermark.cs et remplacez-le par ce code. Assurez-vous que vous avez changé d'espace de noms pour correspondre à votre espace de nom de programme.
#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);
}
}
Dans votre formulaire vous activez comme ceci:
textBoxYourWhatever.SetWatermark("Text that should display");
Il y reste aussi longtemps le TextBox
est vide. Lorsque les utilisateurs entrent dans TextBox
le texte disparaît. Il apparaît à nouveau lorsque TextBox
est nettoyé (par l'utilisateur ou automatiquement). Pas besoin d'événements spéciaux, etc.
EDIT:
J'ai ajouté aussi WaterMarkTextBox de classe interne qui vous donne la possibilité d'utiliser simplement nouvelle WaterMarkTexBox qui devient disponible dans Designer. Ensuite, faites-le glisser et déposez-le à votre concepteur et utilisez-le. Il se comporte comme un champ de texte normal et vous donne juste un champ supplémentaire WaterMarkText. Je préfère toujours la première méthode. Ne te fait pas reconstruire ton gui.
Si vous avez essayé deux solutions ... la deuxième * devrait * avoir fonctionné ... cela pourrait être un bug dans le code. Pourriez-vous s'il vous plaît fournir le code que vous avez réellement utilisé? – Nick
J'ai posté le code. Faites-moi savoir si c'est suffisant pour continuer. – Slateboard
Alors, est-ce qu'une solution vous a aidé avec ce que vous vouliez accomplir? – MadBoy