1

我目前正在开发一个具有多个表单和对话框的应用程序。部分功能是功能区上的一组剪切、复制和粘贴按钮。到目前为止,我还不能编写处理剪切复制和粘贴操作的代码。我的问题如下:

在我的主窗体的 Application.Idle 事件中,我试图找出当前处于活动状态的控件,而不管当前处于活动状态的窗体(可能是主窗体、mdi 子窗体或对话框。经过大量试验和错误,这是我最成功的尝试:

Form activeForm = Form.ActiveForm;
Control activeControl = activeForm.ActiveControl;

这适用于大多数情况,但是当控件嵌入容器(例如浮动停靠面板)中时,activeControl 变量返回容器控件,而不是其上具有焦点的文本框。

我在这里错过了什么吗?是否有更好的方法来实现此功能?

谢谢,尼克

4

1 回答 1

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 的 DockPanel Suite,例如),那么您将不得不使用他们自己的属性(例如DockPanel.ActiveDocumentDockPanel.ActiveContent)来获取对接形式,但总体思路保持不变。

于 2013-09-06T11:00:19.000 回答