1
75
我将采用非递归方法:
|
2
27
在网上搜索之后,我在 George Shepherd's Windows Forms FAQ
|
3
21
窗体或容器上的ActiveControl 将 在您的示例中,如果文本框具有Focus:then:for表单、TableLayoutPanel和FlowLayoutPanel:the'ActiveControl属性 在他们当中 一些,但不是全部,“真正的”集装箱控制类型。。。像表单和用户控件。。。公开键事件(在Form的情况下:只有当Form.KeyPreview==true时,才能使用它们)。 根据设计,包含其他控件(如TableLayOutPanel、GroupBox、Panel、FlowLayoutPanel等)的其他控件包括 不 键入ContainerControl,它们不会公开KeyEvents。 有没有试过投球 实例 直接地 to ContainerControl不会编译:它们不是ContainerControl类型。 接受答案中的代码,以及更正第一个答案拼写错误的下一个答案中的代码,将编译/接受上述实例作为参数,因为您通过设置参数类型控件将它们“向下转换”为类型“Control” 但在每种情况下,转换到ControlContainer将返回null,传入的实例将返回(向下转换):本质上是一个no-op。 是的,如果您将一个“真正的”ControlContainer(如表单实例)传递给修改后的应答代码,它将工作,它位于ActiveControl的父继承路径中,但您仍然在浪费时间复制“ActiveControl”的功能。 那么什么是“真正的”集装箱控制:请查看: MS docs for ContainerControl 只有Peter的答案才真正回答了这个明确的问题,但这个答案带来了使用互操作的代价,并且“ActiveControl将为您提供您所需要的”。 还要注意的是,每个控件(容器或非容器)都有一个从不为null的控件集合,而且很多基本WinForms控件(我从来没有尝试过所有控件:为什么我会?)允许您执行“疯狂的操作”,例如将控件添加到“简单”控件(如按钮)的控件集合中而不会出错。 现在如果 真实意图 你的问题之一是问你如何找到最外层的集装箱控制器 ... 这不在表格上 控件嵌套了一些任意深度的级别。。。你可以使用一些 思想 答案是:但是代码可以大大简化。 常规控件、ContainerControl、UserControls等(但不是表单!)都有一个“Container”属性,您可以访问该属性来获取它们的直接容器,但要确保在它们的固有路径中有“final Container”,而该路径不是表单,需要一些代码来“遍历”继承树,这里演示了这一点。
希望这有帮助。 |
4
9
Hinek的解决方案对我来说很有效,除了 集装箱控制 ,而不是ControlContainer。(以防万一你被那条红色的蜿蜒线弄伤了头。)
|
5
2
|
6
0
ActiveControl并不总是有效,就像SplitContainer一样,ActiveControl.Focused为false。 因此,对于更简单的方法,可以这样做:
|
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
Dansih · .Net核心自定义身份验证方案 2 年前 |
lolorekkk · 面板插入。NET WinForm 2 年前 |