我试图遍历所有ToolStripButtons并找到所有ToolStripButtons。 我的代码是:
private ToolStripItem FindControl(ToolStripButton parent, string controlName)
{
ToolStripButton c = null;
foreach (ToolStrip ctrl in parent.Owner.Items.ToString())
{
if (ctrl.GetType().ToString() == typeof(ToolStrip).ToString())
{
foreach (ToolStripButton item in ((ToolStripButton)ctrl).OwnerItem.Name)
{
if (item.GetType().ToString() == typeof(ToolStripButton).ToString())
{
if (item.Name.Equals(controlName))
{
//c = item.GetType().ToString() =typeof(ToolStripButton).ToString();
return item;
}
}
}
}
if (c == null)
{
c = FindControl(parent.GetType().ToString() == typeof(ToolStripButton).ToString(), parent.Name);
}
else
{
break;
}
}
return c;
}
但是它没有产生预期的结果。enter image description here
答案 0 :(得分:6)
使用Linq <dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.10</version>
</dependency>
,可以大大简化查找所需控件的过程:
.OfType<T>()
答案 1 :(得分:3)
为简化此操作,您可以编写一些辅助函数,如下所示:
public static IEnumerable<Control> AllControls(Control parent)
{
if (parent == null)
throw new ArgumentNullException();
return implementation();
IEnumerable<Control> implementation()
{
foreach (Control control in parent.Controls)
{
foreach (Control child in AllControls(control))
{
yield return child;
}
yield return control;
}
}
}
然后您可以找到特定类型的所有控件,如下所示:
var allToolstripButtons = AllControls(parent).OfType<ToolStripButton>();
这是一个递归解决方案,它将查找所有子控件,无论它们在控件结构中的嵌套深度如何-如果您只需要查找作为给定父级的直接子级的ToolStripButton
项,则只需使用@Filburt的简单答案。
(注意:内联implementation()
函数之所以奇怪,是为了确保在评估parent
结果之前检查Enumerable
参数是否为空。)
答案 2 :(得分:0)
我的意思是将表单的所有控件列出到一个ListBox中,以便能够设置属性(基于控件的安全性),我终于弄清楚了。
所以我用这段代码弄清楚了”
private void ShowControls(Control.ControlCollection controlCollection)
{
foreach (Control c in controlCollection)
{
if (c.Controls.Count > 0)
{
ShowControls(c.Controls);
}
if (c is MenuStrip)
{
MenuStrip menuStrip = c as MenuStrip;
ShowToolStripItems(menuStrip.Items);
}
if (c is Panel)
{
formToolTip2.SetToolTip(c, c.Name);
PageControls.Items.Add(c.Name);
}
if (c is Button || c is ComboBox || c is TextBox ||
c is ListBox || c is DataGridView || c is RadioButton ||
c is RichTextBox || c is TabPage || c is CheckBox || c is ToolStrip)
{
var toolstrips = controlCollection.OfType<ToolStrip>();
foreach (ToolStrip ts in toolstrips)
{
foreach (ToolStripItem tsi in ts.Items)
{
if (ts.Items.Count > 0)
{
if (tsi is ToolStripButton)
{
ToolStripButton tb = tsi as ToolStripButton;
tb.ToolTipText = tb.Name;
if (!PageControls.Items.Contains(tb.Name))
{
PageControls.Items.Add(tb.Name);
}
}
}
}
}
formToolTip2.SetToolTip(c, c.Name);
PageControls.Items.Add(c.Name);
}
}
}