我正在Windows窗体应用程序中实现复制粘贴。 当用户更改应用程序中的focus元素时,我需要为这两个操作启用/禁用条形按钮。
我可以使用类似这样的内容找到当前的聚焦控件:http://www.syncfusion.com/FAQ/windowsforms/faq_c41c.aspx#q1021q,但是如何检测聚焦控件是否已更改?
答案 0 :(得分:9)
在表单加载事件处理程序中,您还可以遍历表单中包含的所有控件,并为每个可聚焦控件添加Enter事件的事件处理程序:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control control in Controls)
{
control.Enter += ControlReceivedFocus;
}
}
void ControlReceivedFocus(object sender, EventArgs e)
{
Debug.WriteLine(sender + " received focus.");
}
答案 1 :(得分:2)
我的建议是使用Application.Idle事件。
使用此技术,您将始终拥有正确的按钮状态,并且您无需担心订阅许多控件事件以检测焦点更改。这也是轻量级方法,因为只有在应用程序不忙时才会引发空闲事件。
答案 2 :(得分:1)
我认为您应该向控件添加一个事件处理程序(或者如果您有许多相同的类型,将其子类化,并覆盖相应的OnChange
处理程序)。这样您就不必“找到”聚焦控件(它将作为发送者参数给出),并且只有在实际发生更改时才会出现事件。
答案 3 :(得分:0)
要检测控件上的焦点,您可以创建此事件:
void MyGotFocus(object sender, EventArgs e)
{
if (sender is TextBox)
{
//TODO YOUR OPERATION
//FOR EXAMPLE
(sender as TextBox).SelectAll();
}
}
,下一步是通过代码关联控件和事件:
myText1.GotFocus += MyGotFocus;
myText2.GotFocus += MyGotFocus;