その中に「テキストボックスの目的について話す」をすべて割り当てToolTip
てTextBox
入れてみませんか?
ToolTip
フォーム内にドラッグ&ドロップするだけです。そして、各TextBox
プロパティで、その他のセクションToolTip
に追加のエントリが必要ですtoolTip1
(または、名前を変更した場合の名前は何でも)。
次に、ユーザーがカーソルを合わせてTextBox
(読み取り専用/無効TextBox
にするとツールヒントが表示されないようです)、そこで1秒間停止すると、ツールヒントが適切な情報とともに表示されます。
最終的には、何が何であるかLabel
をTextBox
言う代わりに a を使用することもできますが、aToolTip
を使用することで、ユーザーにより多くの情報を説明することもできます。
イベントを設定したり、SelectAll を処理したりして、長い道のりを歩む必要がないように、WaterMark で何かを行うには、このようにすることができます。新しい watermark.cs ファイルを作成し、このコードに置き換えます。プログラムの名前空間と一致するように名前空間を変更したことを確認してください。
#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);
}
}
フォームでは、次のようにアクティブ化します。
textBoxYourWhatever.SetWatermark("Text that should display");
TextBox
が空である限り、そこにとどまります。ユーザーがTextBox
テキストに入ると消えます。TextBox
(ユーザーによって、または自動的に) が消去されると、再び表示されます。特別な行事等は必要ありません。
編集:
Designer で利用可能になる新しい WaterMarkTexBox を簡単に使用するためのオプションを提供する内部クラス WaterMarkTextBox も追加しました。次に、それをデザイナーにドラッグ アンド ドロップして使用します。通常のテキストボックスのように動作し、追加のフィールド WaterMarkText を提供するだけです。
私はまだ最初の方法を好みます。GUIを再度再構築する必要はありません。