下面我们以TextBox控件为例:
主要是通过TextBox的获取焦点Enter和失去焦点Leave两个事件来实现的(点击控件,在事件中添加)
思路如下:
1.设置一个字符串常量,作为TextBox的默认值;
2.在属性Text中设置默认值,并设置TextBox的ForeColor为灰色(或者在代码中添加,即对话框加载的时候将默认字符串和前景色写入);
3.编写获取焦点事件 TextBox_Enter(object sender, EventArgs e) ,判断TextBox的Text是否等于默认值,
是:则将TextBox内容清空,并将前景色ForeColor改成正常的颜色
4.失去焦点事件 TextBox_Leave(object sender, EventArgs e),判断TextBox的Text是否为空,
是:则再次以灰色来显示默认值
具体的代码如下:
//TextBox的默认值
private const String DEFAULT_TEXT = "默认字符串";
//构造方法
public MyForm()
{
//为TextBox设置默认值和默认值的前景色(字体颜色)
textBox.Text = DEFAULT_TEXT;
textBox.ForeColor = Color.Gray;
}
//获取焦点事件 Enter
private void textBox_Enter(object sender, EventArgs e)
{
if (textBox.Text == DEFAULT_TEXT)
{
textBox.Text = "";
textBox.ForeColor = Color.Black;
}
}
//失去焦点事件 Leave
private void textBox_Leave(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(textBox.Text))
{
textBox.Text = DEFAULT_TEXT;
textBox.ForeColor = Color.Gray;
}
}
其他:
如果你有20个TextBox控件,每一个TextBox控件都想实现这个焦点的功能,那么每一个控件都要写一个获取焦点和失去焦点共两个事件,但你又不想添加40个控件,你可以:
你可以看到函数有两个参数object sender, EventArgs e
sender参数用于传递指向事件源对象的引用。简单来讲就是当前的对象。例如button的点击事件,那么这个sender就代表这个button自己,由于sender指的是事件源对象,sender是object类型,用的时候记得转一下类型才可以用
private void btnError_Click(object sender, EventArgs e)
{
//获取当前点击的Button
//Button but = (Button)sender;
Button thisClickedButton = sender as Button;
}
e参数是是EventArgs类型。简单来理解就是记录事件传递过来的额外信息。一般用于传递用户点击的位置啊,键盘按下的键等事件的额外信息。例如TextBox中有一个KeyPress事件。
private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
//获取当前对象
//TextBox tb = (TextBox)sender;
TextBox tb = sender as TextBox;
//获取当前按下来的键值
char c = e.KeyChar;
}
言归正传:
经过上面的讲解,当你有20个TextBox时,你也可以只写两个函数(Enter,Leave)然后将这两个函数在属性中绑定到每一个控件的Enter,Leave事件上
//获取焦点事件 Enter
private void textBox_Enter(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
if (textBox.Text == DEFAULT_TEXT)
{
textBox.Text = "";
textBox.ForeColor = Color.Black;
}
}
//失去焦点事件 Leave
private void textBox_Leave(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
if (String.IsNullOrEmpty(textBox.Text))
{
textBox.Text = DEFAULT_TEXT;
textBox.ForeColor = Color.Gray;
}
}