それは次のようにVisual Studioでテキストボックスを作成することが可能です:カスタムTextBoxコントロール
答えて
3つのTextBoxイベントを処理する必要があります。デザイナでTextBoxのテキストを「username」に設定し、Font ItalicsにTextBox BackColorをLightYellowに設定し、残りをイベントハンドラで処理します。
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "")
ChangeTextBoxtoWatermark();
}
private void textBox1_MouseEnter(object sender, EventArgs e)
{
if (textBox1.Text == "username")
{
textBox1.Text = "";
textBox1.Font = new Font(this.Font, FontStyle.Regular);
textBox1.BackColor = Color.White;
}
}
private void textBox1_MouseLeave(object sender, EventArgs e)
{
if (textBox1.Text == "")
ChangeTextBoxtoWatermark();
}
private void ChangeTextBoxtoWatermark()
{
textBox1.Font = new Font(this.Font, FontStyle.Italic);
textBox1.BackColor = Color.LightYellow;
textBox1.Text = "username";
}
は、私はそれをチェックして、それが動作する罰金:)
あなたはTextBoxToOriginalのようなコードを屈折することができます() –
これは通常、 "キュー" と呼ばれています。
- There is a good answer on SO。また
- は、あなたがDevExpress社のWinFormsを使用している場合は、私がa small class to enhance their
TextEdit
controlを書きました。実際
。よりよい解決策は、テキストボックスのPaintイベントを使用して文字列を描画することです。ここで
はコードです:
class CueTextBox : TextBox
{
public event EventHandler CueTextChanged;
private string _cueText;
public string CueText
{
get { return _cueText; }
set
{
value = value ?? string.Empty;
if (value != _cueText)
{
_cueText = value;
OnCueTextChanged(EventArgs.Empty);
}
}
}
public CueTextBox()
: base()
{
_cueText = string.Empty;
}
protected virtual void OnCueTextChanged(EventArgs e)
{
this.Invalidate(true);
if (this.CueTextChanged != null)
this.CueTextChanged(this, e);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (string.IsNullOrEmpty(this.Text.Trim()) && !string.IsNullOrEmpty(this.CueText) && !this.Focused)
{
Point startingPoint = new Point(0, 0);
StringFormat format = new StringFormat();
Font font = new Font(this.Font.FontFamily.Name, this.Font.Size, FontStyle.Italic);
if (this.RightToLeft == RightToLeft.Yes)
{
format.LineAlignment = StringAlignment.Far;
format.FormatFlags = StringFormatFlags.DirectionRightToLeft;
}
e.Graphics.DrawString(CueText, font, Brushes.Gray, this.ClientRectangle, format);
}
}
const int WM_PAINT = 0x000F;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_PAINT)
{
this.OnPaint(new PaintEventArgs(Graphics.FromHwnd(m.HWnd), this.ClientRectangle));
}
}
}
は今、必要なのはセットしたいとあなたが行われている初期値に「CueText」プロパティです!
良いヒントが、初心者のために少し複雑な:) –
あなたが予期しない結果につながる可能性があるテキストボックスの「テキスト」プロパティを変更していないこの方法です。私の解決策では、テキストのみテキストボックス領域の上に塗装され、あなたは何の心配もせずにTextプロパティを使用することができます – Nissim
私は個人的にあなたのソリューションを好き:) –
- 1. カスタムTextBoxコントロールの描画
- 2. TextBoxコントロール
- 3. カスタムTextBoxコントロールの 'type'属性を変更する方法
- 4. WPFでカスタムTextBoxコントロールのCornerRadiusを指定する方法は?
- 5. カスタムのTextBoxコントロールが組み込まれたクライアント側の検証
- 6. .NET --- TextBoxコントロールを - ユーザーが
- 7. TextBoxコントロールの高速応答
- 8. イベントハンドラTextBoxコントロールを持つOnItemCommand
- 9. ASP.NETカスタムWebコントロール
- 10. カスタムKeyDownコントロール
- 11. MonodroidカスタムUIコントロール
- 12. DataGridviewでマスクされたTextboxコントロール
- 13. 派生TextBoxコントロールのWPFパフォーマンスの問題
- 14. WinForms:可変数の動的TextBoxコントロール
- 15. NullReferenceException - OriginalSourceとしてのStackPanel、TextBoxの問題、TextBoxのカスタムMouseLeftButtonDown_Event
- 16. ListViewコントロールとカスタムSurfaceView
- 17. カスタムDropDownListコントロールのビューステート
- 18. カスタム編集コントロールwin32
- 19. カスタムTextBoxを使用する方法
- 20. カスタムTextBoxのベーステキストメソッドを呼び出す
- 21. カスタムListBoxItemコントロールへのアクセスとコントロール
- 22. 他のコントロールを含むカスタムGroupBoxコントロール
- 23. は、カスタムのWindows Phoneコントロール
- 24. カスタムSSRSコントロールの作成
- 25. MSChartコントロールのカスタムX/Yグリッドライン
- 26. カスタムDataGridコントロールのサブコントロールのデフォルトスタイル
- 27. Unipagerコントロールのカスタム変換
- 28. AlfrescoのカスタムUIコントロール - アソシエーション
- 29. Wordpress Divi Sliderカスタムjavascriptコントロール
- 30. 取得値が、私はItemTemplateにでTextBoxコントロールとListViewコントロールを持っている
あなたがテキストボックスにあなたのケースでウォーターマーク(ユーザー名)を追加することができるのWinFormsを使用している場合... –
テキストが消えませんSOの検索ボックスのようなボックスをクリックすると、 –
は、私はそれがあなたのために働いてくれてうれしい:) –