カーソルが入ったときに消えるウォーターマークのテキストを最初に表示する基本的なWindowsフォームTextBoxの優れた実装方法を教えてもらえますか?私はEnterとLeaveのイベントをいくつか創造的に使って自分自身を作り出すことができると思っていますが、どこかで完璧に使える実装があると確信しています。私はWPFの実装を見て、必要に応じてネストすることができましたが、ネイティブのWinForms TextBoxの派生が良いでしょう。WinFormsのウォーターマークのTextBox
これまでのところこれがあります。まだそれを試していないが、誰も眩しい問題を参照してくださいですか?
public class WatermarkTextBox:TextBox
{
public string WatermarkText { get; set; }
public Color WatermarkColor { get; set; }
private Color TextColor { get; set; }
private bool isInTransition;
public WatermarkTextBox()
{
WatermarkColor = SystemColors.GrayText;
}
private bool HasText { get { return Text.IsNotNullOrBlankOr(WatermarkText); }}
protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
if (HasText) return;
isInTransition = true;
ForeColor = TextColor;
Text = String.Empty;
isInTransition = false;
}
protected override void OnForeColorChanged(EventArgs e)
{
base.OnForeColorChanged(e);
if (!isInTransition) //the change came from outside
TextColor = ForeColor;
}
protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
if (HasText) return;
isInTransition = true;
ForeColor = WatermarkColor;
Text = WatermarkText.EmptyIfNull();
isInTransition = false;
}
}
EDIT:上記のコードは最終的にはいくつかの精巧さで動作しましたが、CueProviderはもっとうまく機能しました。最終的な実装は次のとおりです。
public class WatermarkTextBox:TextBox
{
private string watermarkText;
public string WatermarkText
{
get { return watermarkText; }
set
{
watermarkText = value;
if (watermarkText.IsNullOrBlank())
CueProvider.ClearCue(this);
else
CueProvider.SetCue(this, watermarkText);
}
}
}
私はCueProvider機能を完全に統合できましたが、これは美しく機能します。
透かしが一意(紙の外側に電子透かしと呼ばれる)は、その用紙をタグ紙に画像またはパターンです。キューバナーは、あなたが何を記述しているかという言葉です。 – Tergiver
Jay Riggsの削除済み回答:[CueProvider](http://www.codeproject.com/kb/edit/cueprovider.aspx)を試してください –