SplitContainer被识别为ActiveControl

本文关键字:ActiveControl 识别 SplitContainer | 更新日期: 2023-09-27 17:58:45

在我的表单中,我有两个拆分容器和一些面板、ActiveX控件和其他Windows窗体控件,如按钮、复选框等

        Control activeControl = this.ActiveControl;
        MessageBox.Show(activeControl.Name);

但它总是将splitcontainer1作为activeCnotrl返回。我应该如何获得ActiveControl

SplitContainer被识别为ActiveControl

假设"this"是表单,当您调用this.ActiveControl时,它会直接在表单上查找活动控件(this)。你可能需要做一些事情,比如:

this.splittercontainer1.ActiveControl 

我也遇到了同样的问题,我通过检查控件是否是Splitcontainer,然后检查Splitcontainer内的活动控件来解决这个问题。

if (ActiveControl.GetType() == typeof(SplitContainer))
{
    var containerControl = (SplitContainer)ActiveControl;
    if (containerControl.ActiveControl is MemoEdit)
    {
         //Do something
    }
}

这是我的通用解决方案,应该可以处理任何嵌套的容器控件。

var control = this.ActiveControl;
while (control is ContainerControl container)
{
    control = container.ActiveControl;
}
var actualActive = control;