winform下如何遍历窗体上所有控件?

alger2001 2007-01-09 03:55:41
如题,界面上的控件是panel多层嵌套,还有个menu菜单项.

用的是如下方法
public static bool SetControlsTag(Control control,int rank)
{

foreach (Control ctrl in control.Controls)
{
ctrl.Tag = rank;
SetControlsTag(ctrl, rank);
}

return true;
}
}
调用SetControlsTag(this)后发现这个递归函数无法遍历菜单中的子项,难道必须像
http://community.csdn.net/Expert/topic/5195/5195931.xml?temp=.7129633
那样再写一个递推函数来遍历菜单项吗?
请问有没有什么通用的方法可以遍历到界面上的所有控件?
...全文
536 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdl2005lyx 2007-01-10
  • 打赏
  • 举报
回复
lz:你的问题肯定是要用递归解决,这点毫无疑问。至于“无法遍历菜单中的子项”,其实还要工具栏,状态栏等控件都有类似的问题,为什么,只有问微软了。。。。。
ReachZh 2007-01-10
  • 打赏
  • 举报
回复
恩,帮你顶下
alger2001 2007-01-10
  • 打赏
  • 举报
回复
up
alger2001 2007-01-10
  • 打赏
  • 举报
回复
看来只能是写两个递归来实现了
结贴了
Red_angelX 2007-01-10
  • 打赏
  • 举报
回复
因为很多东西是GDI画上去的 所以无法遍历
bigrongshu 2007-01-10
  • 打赏
  • 举报
回复
foreach (Control ctrl in control.Controls)
{
if( ctrl is ToolStrip )
{
ToolStrip tmpTS = ctrl as ToolStrip;
foreach (ToolStripItem item in tmpTS.Items)
{
item.Tag = rank;
}

}
if( ctrl is ContextMenuStrip)
{
ContextMenuStrip tmpTS = ctrl as ContextMenuStrip;
foreach (ToolStripItem item in tmpTS.Items)
{
item.Tag = rank;
}

}
}
alger2001 2007-01-09
  • 打赏
  • 举报
回复
yuanzhihua520 2007-01-09
  • 打赏
  • 举报
回复
UP
alger2001 2007-01-09
  • 打赏
  • 举报
回复
谢谢楼上
可是我是想设置界面上所有控件的tag值
你那个方法不适合多层嵌套的控件和菜单项吧
jhtchina 2007-01-09
  • 打赏
  • 举报
回复
/// <summary>
/// Get Control
/// </summary>
/// <param name="Tag">Control Tag</param>
/// <returns>Control</returns>
public Control FindControl(string Tag)
{
foreach (Control ctl in this.groupBox1.Controls)
{
if (ctl.Tag != null && ctl.Tag.ToString() == Tag)
{
return ctl;
}
}
return null;
}
groupBox1下面的所有控件

//查找收费标志
ComboBox cbox = FindControl("ChargeRequired") as CheckBox;
//查找授权标志
ComboBox cbox1 = FindControl("AuthorizationFlag") as CheckBox;

根据Tag来找combobox
bill024 2007-01-09
  • 打赏
  • 举报
回复
mark

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧