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;
}
}