2010-05-13 35 views
3

我有一個窗體,我想知道哪個控件具有焦點。在窗體中找到焦點控件(在.netCF中)

我該怎麼做?我見過的最佳解決方案是讓我重複屏幕上的所有控件。雖然可行,但僅僅知道哪個控件具有重點,似乎有很多工作要做。

回答

2

你既可以做什麼,也可以實現你自己的表單基類來爲你處理任務。

public class BaseForm : Form 
{ 
    public BaseForm() 
    { 
     this.Load += new EventHandler(BaseForm_Load); 
    } 

    void BaseForm_Load(object sender, EventArgs e) 
    { 
     this.HandleFocusTracking(this.Controls); 
    } 

    private void HandleFocusTracking(ControlCollection controlCollection) 
    { 
     foreach (Control control in controlCollection) 
     { 
      control.GotFocus += new EventHandler(control_GotFocus); 
      this.HandleFocusTracking(control.Controls); 
     } 
    } 

    void control_GotFocus(object sender, EventArgs e) 
    { 
     _activeControl = sender as Control; 
    } 

    public virtual Control ActiveControl 
    { 
     get { return _activeControl; } 
    } 
    private Control _activeControl; 

} 

這是不可能避免控制迭代,但是如果這樣的迭代將只發生一次,而不是每次都做到了,你想知道主動控制。然後,您可以只需調用ACTIVECONTROL按標準WinForms應用程序如下:

Control active = this.ActiveControl; 

這個唯一的缺點是,如果你不得不在運行時添加新的控制的需求,那麼你就必須確保它們正確連接到control_GotFocus事件。

+0

雖然看起來不錯,但這不起作用。這是因爲LostFocus事件出現在下一個控件的GotFocus之前。因此,在LostFocus事件中,您無法知道焦點在哪裏(使用此方法。但是,此方法工作正常:http://stackoverflow.com/questions/1648596/c-net-compact-framework-custom-usercontrol-focus -issue/1648653#1648653) – Vaccano 2010-05-24 20:55:49

+0

這有點苛刻。它工作正常,而不是來自LostFocus事件。無論如何,我想不出一個情景,你可能想知道下一個關於LostFocus事件的重點控制。 – GenericTypeTea 2010-05-25 07:20:53

+0

我並不是故意要苛刻。抱歉。我非常感謝這個迴應以及你投入的時間。至於爲什麼我想知道下一個控制...我覺得我有一個很好的理由。感謝你付出的努力。 (作爲一個補充的感謝,我給了你一些更好的問題和答案upvotes。) – Vaccano 2010-05-25 15:02:34

相關問題