在我的窗体中,我有两个拆分容器、一些面板、ActiveX控件和其他Windows窗体控件,如按钮、复选框等。现在在我所说的代码中
Control activeControl = this.ActiveControl; MessageBox.Show(activeControl.Name);
但是它总是返回splitcontainer1作为activeCnottrl。我应该如何获得ActiveControl?
ActiveControl
btxsgosb1#
假设“this”是表单,当您呼叫this.ActiveControl时,它会直接在表单(this)上寻找作用中的控件。您可能必须执行下列动作:
this.ActiveControl
this.splittercontainer1.ActiveControl
ggazkfy82#
我遇到了同样的问题,我通过检查控件是否是拆分容器,然后检查拆分容器内的活动控件来解决它。
if (ActiveControl.GetType() == typeof(SplitContainer)) { var containerControl = (SplitContainer)ActiveControl; if (containerControl.ActiveControl is MemoEdit) { //Do something } }
gr8qqesn3#
下面是我的通用解决方案,它应该处理任何嵌套的容器控件。
var control = this.ActiveControl; while (control is ContainerControl container) { control = container.ActiveControl; } var actualActive = control;
3条答案
按热度按时间btxsgosb1#
假设“this”是表单,当您呼叫
this.ActiveControl
时,它会直接在表单(this)上寻找作用中的控件。您可能必须执行下列动作:ggazkfy82#
我遇到了同样的问题,我通过检查控件是否是拆分容器,然后检查拆分容器内的活动控件来解决它。
gr8qqesn3#
下面是我的通用解决方案,它应该处理任何嵌套的容器控件。