2010-12-13 30 views
6

我有一個C#窗體窗體應用程序與幾個文本框和一個按鈕。我想找出關注焦點的文本框並對其進行處理。我已經寫了下面的代碼,但當然它不會工作,因爲按鈕一按它就會獲得焦點。找出與上次焦點控制

private void button1_MouseDown(object sender, MouseEventArgs e) 
{ 
    foreach (Control t in this.Controls) 
    { 
     if (t is TextBox) 
     { 
      if (t.Focused) 
      { 
       MessageBox.Show(t.Name); 
      } 
     } 
    } 
} 
+1

按鈕也可以通過Tab按鈕獲得焦點。 – 26071986 2010-12-13 11:04:01

回答

15

沒有內置的屬性或功能來跟蹤以前的重點控制。正如你所提到的,無論何時點擊按鈕,它都會佔用焦點。如果你想跟蹤之前關注的文本框,你將不得不自己去做。要去了解這將是一個類級變量添加到您的形式保存到當前聚焦的文本框控件的引用

方式一:

private Control _focusedControl; 

然後在GotFocus事件爲您的每個TextBox控件,您只需更新_focusedControl變量與文本框:

private void TextBox_GotFocus(object sender, EventArgs e) 
{ 
    _focusedControl = (Control)sender; 
} 

現在,只要點擊一個按鈕(你爲什麼使用MouseDown事件如你的問題,而不是butto的?N爲Click事件),您可以使用引用到被保存在類級變量前面爲重點的文本框控件,只要你喜歡:

private void button1_Click(object sender, EventArgs e) 
{ 
    if (_focusedControl != null) 
    { 
     //Change the color of the previously-focused textbox 
     _focusedControl.BackColor = Color.Red; 
    } 
} 
3

也許你可以訂閱你的文本框的GotFocus事件,存儲文本框(你會得到與發件人參數)在一個領域,當您按下按鈕,使用這個領域?

2

我會使用button1_MouseHover事件。當此事件被觸發時,ActiveControl直到指向上一次控制,您可以將其存儲爲_focusedControl

當然,如果用戶標籤到按鈕,這將不起作用。