1. 程式人生 > 其它 >Winform控制元件設定預設值(與滑鼠焦點結合)

Winform控制元件設定預設值(與滑鼠焦點結合)

技術標籤:C#C#winform控制元件獲取焦點失去焦點多控制元件繫結控制元件引數

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