Winform控件设置默认值(与鼠标焦点结合)

C# 专栏收录该内容
11 篇文章 0 订阅

下面我们以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;
          }
      } 

 

  • 2
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

阿尔兹

如果觉得有用就推荐给你的朋友吧

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值