我目前正在开发一个具有多个表单和对话框的应用程序。部分功能是功能区上的一组剪切,复制和粘贴按钮。到目前为止,我还没有能够编写处理剪切复制和粘贴操作的代码。我的问题如下:
在我的主窗体的Application.Idle事件中,我试图弄清楚当前活动的控件,无论当前活动的窗体(可能是主窗体,mdi子窗口或对话框)。反复试验,这是我最成功的尝试:
Form activeForm = Form.ActiveForm;
Control activeControl = activeForm.ActiveControl;
这适用于大多数情况,但是当控件嵌入容器(例如浮动dockpanel)时,activeControl变量返回容器控件,而不是其上具有焦点的文本框。
我在这里遗漏了什么吗?是否有更好的方法来实现此功能?
谢谢,尼克
答案 0 :(得分:0)
我在包含几个控件的GroupBox
的表单上尝试了这个,并且它按预期工作(但对于生产代码,如果没有选择任何内容,或者应用程序没有,则应该添加一些空值检查总而言之:)
Form activeForm = Form.ActiveForm;
Control activeControl = activeForm.ActiveControl;
while (activeControl.HasChildren)
{
activeControl = activeControl
.Controls
.Cast<Control>()
.FirstOrDefault(c => c.Focused);
}
另一方面,如果您使用的是第三方停靠库(例如,您提到了DockPanel,我想的是Weifen Luo's DockPanel Suite),那么您将不得不使用自己的属性(例如{ {1}}或DockPanel.ActiveDocument
)获取停靠表单,但总体思路保持不变。