gpt4 book ai didi

c# - 如何循环遍历 Windows 窗体窗体中的所有控件或如何查找特定控件是否为容器控件?

转载 作者:可可西里 更新时间:2023-11-01 08:19:19 25 4
gpt4 key购买 nike

我会说出我的要求。我需要为 Windows Forms 中的每个控件设置一个 keydown 事件形式。如果我必须对所有按键事件执行的操作相同,那么最好这样做而不是手动对所有控件执行此操作。

所以我基本上可以这样做:

foreach (Control c in this.Controls)
c.KeyDown+= new KeyEventHandler(c_KeyDown);

但是在这里,foreach 不会在位于 groupBox 或 tabControl 内的那些控件内循环。我的意思是,如果表单 (this) 包含一个 groupBox 或其他一些容器控件,那么我可以获得该特定容器控件的 keydown 事件。而且 foreach 不会遍历驻留在该容器控件内的控件。

问题 1:如何获取表单中“所有”控件的按键事件?

如果上面的谜题都解决了,那么我的问题就结束了。

这是我可以做的其他事情:

主要是伪代码

foreach (Control c in this.Controls)
{
c.KeyDown += new KeyEventHandler(c_KeyDown);

if (c is Container control)
FunctionWhichGeneratesKeyDownForAllItsChildControls(c)
}

我知道我将不得不多次执行 FunctionWhichGeneratesKeyDownForAllItsChildControls(c) 以获取所有控件的 keydown,如果在 groupbox 中有 groupbox 左右的话。我能做到。我的问题是,

问题二:如何判断c是否为容器控件?

最佳答案

一个简单的递归函数就可以做到。

private void AddEvent(Control parentCtrl)
{
foreach (Control c in parentCtrl.Controls)
{
c.KeyDown += new KeyEventHandler(c_KeyDown);
AddEvent(c);
}
}

关于c# - 如何循环遍历 Windows 窗体窗体中的所有控件或如何查找特定控件是否为容器控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com