winform程序,如何实现文本框,默认显示“提示信息”,只要一点击,提示就没了
比如,两个文本框,一个用户名,一个密码
用户名的文本框中默认显示 “请输入用户名”
密码框的文本框默认显示“请输入密码”
昨天刚学做winfrom程序好多不是很懂
这是一种常用的用户体验:叫水印Textbox,即Watermark TextBox,微软控件库没有提供支持,一般为了方便重用,都会对默认的TextBox进行继承拓展。给你一个网址:http://blog.csdn.net/sqshine/article/details/3739671,里面提供了实现方式。这样你也不用每个TextBox都写触发事件了。效果是:
后话:有人用WPF三行代码实现了这种效果http://www.codeproject.com/Articles/26977/A-WatermarkTextBox-in-lines-of-XAML
祝你在.NET开发上“芝麻开花节节高”!
你以前学WEB编程的吧?
Winform没有这样的默认行为,你非要的话,可以通过Textbox_Focused事件捕捉,自行处理。
楼下说的DX,全名是DevExpress,里面有个控件叫TextEdit,
在Properties属性中,有个属性叫NullText,设置那个属性,就可以得到你要的效果。
DX控件 winform 自带你要的这种属性
这个我倒是没有注意到,一般应该是从WEB转WINFORM的才会有这种想法。
我是WINFORM做得太久了,直接没有想法了。
@爱编程的大叔: 听你这么一说,特意去DxDemoCenter 去找了下是不是记错了,好早以前做过winform
DX的textedit碰到passwordchar也不好搞。 得动态去判断。
1、通过事件组合来实现吧。默认设置Text,ForeColor,然后有输入的时候置空,重新设置ForeColor。
2、或者用支持该功能的第三放组件库实现;
3、再者就是封装自定义控件(详细同1),实现。
一: 设置文本框的Text为你要的提示“提示信息”,
二: 用好文本框的两个事件, 代码为下: textBox1为用户名, textBox2为密码框。
private void textBox1_Enter(object sender, EventArgs e)//用户名文本框焦点获得事件 { if (textBox1.Text == "请输入用户名") { textBox1.Text = ""; } } private void textBox1_Leave(object sender, EventArgs e)//用户名文本框焦点离开 { if (textBox1.Text == "") { textBox1.Text = "请输入用户名"; } } private void textBox2_Enter(object sender, EventArgs e) //密码框焦点获得 { textBox2.PasswordChar = char.Parse("*"); //设置密码框显示字符为* if (textBox2.Text == "请输入密码") { textBox2.Text = ""; } } private void textBox2_Leave(object sender, EventArgs e) { if (textBox2.Text == "") { textBox2.Text = "请输入密码"; textBox2.PasswordChar = '\0'; //清空PasswordChar设置 } }
三: 在点提交按钮之时, 再去判断文本框是否为“请输入...神马”, 如果是, 就阻止用户提交。
楼上大侠
public partial class WatermarkBox : TextBox { private string watermark; private Color watermarkColor; private Color foreColor; private bool empty; [Browsable (true)] public Color WatermarkColor { get { return watermarkColor; } set { watermarkColor = value; if (empty) { base.ForeColor = watermarkColor; } } } [Browsable(true)] public string Watermark { get { return watermark; } set { watermark = value; if (empty) { base.Text = watermark; base.ForeColor = watermarkColor; } } } public WatermarkBox () { empty = true; foreColor = ForeColor; } [Browsable(true)] public new Color ForeColor { get { return foreColor; } set { foreColor = value; if (! empty) base.ForeColor = value; } } public override string Text { get { if (empty) return ""; return base.Text; } set { if (value == "") { empty = true; base.ForeColor = watermarkColor; base.Text = watermark; } else base.Text = value; } } protected override void OnGotFocus (EventArgs e) { if (empty) { empty = false; base.ForeColor = foreColor; base.Text = ""; } base.OnGotFocus (e); } protected override void OnLostFocus (EventArgs e) { base.OnLostFocus (e); if (base.Text == "") { empty = true; base.ForeColor = watermarkColor; base.Text = watermark; } else empty = false; } }
自定义一个 watermarkTextbox,然后在工具箱拖拽一个 watermarkBox
最后设置Watermark 属性,就OK了
自己做一个自定义控件是最方便的方法,还能通用!
I think you've got your answer
也曾想过,看到这么多大神的解答,真的是学习了。
其实试过了楼上各位大神的各种方法,对于电脑小白来说都有些复杂了,我来说个方法吧
然后回车或双击textBox11_MouseClick进入编辑
输入上面代码,运行就可以了