我有一個窗體,我想知道哪個控件具有焦點。在窗體中找到焦點控件(在.netCF中)
我該怎麼做?我見過的最佳解決方案是讓我重複屏幕上的所有控件。雖然可行,但僅僅知道哪個控件具有重點,似乎有很多工作要做。
我有一個窗體,我想知道哪個控件具有焦點。在窗體中找到焦點控件(在.netCF中)
我該怎麼做?我見過的最佳解決方案是讓我重複屏幕上的所有控件。雖然可行,但僅僅知道哪個控件具有重點,似乎有很多工作要做。
它看起來像THIS是繼續前進的CF.
你既可以做什麼,也可以實現你自己的表單基類來爲你處理任務。
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
事件。
雖然看起來不錯,但這不起作用。這是因爲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
這有點苛刻。它工作正常,而不是來自LostFocus事件。無論如何,我想不出一個情景,你可能想知道下一個關於LostFocus事件的重點控制。 – GenericTypeTea 2010-05-25 07:20:53
我並不是故意要苛刻。抱歉。我非常感謝這個迴應以及你投入的時間。至於爲什麼我想知道下一個控制...我覺得我有一個很好的理由。感謝你付出的努力。 (作爲一個補充的感謝,我給了你一些更好的問題和答案upvotes。) – Vaccano 2010-05-25 15:02:34