我需要保存并恢复表单上特定控件的设置。
我遍历所有控件并返回名称与我想要的名称匹配的控件,如下所示:
private static Control GetControlByName(string name, Control.ControlCollection Controls)
{
Control thisControl = null;
foreach (Control c in Controls)
{
if (c.Name == name)
{
thisControl = c;
break;
}
if (c.Controls.Count > 0)
{
thisControl = GetControlByName(name, c.Controls);
if (thisControl != null)
{
break;
}
}
}
return thisControl;
}
由此我可以确定控制的类型,从而确定应该存储的属性。
除非控件是已添加到工具条的ToolStrip系列之一,否则这种方法很有效。 e.g。
this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.lblUsername, // ToolStripLabel
this.toolStripSeparator1,
this.cbxCompany}); // ToolStripComboBox
在这种情况下,我可以在调试时看到我对(cbxCompany)感兴趣的控件,但是name属性没有值,因此代码与它不匹配。
关于我如何获得这些控件的任何建议?
干杯, 默里
答案 0 :(得分:3)
感谢您的帮助。
Pinichi让我走上正轨,我正在检查toolStrip.Controls - 应该是toolStrip.Items
以下代码现在对我来说非常合适:
private static Control GetControlByName(string controlName, Control.ControlCollection parent)
{
Control c = null;
foreach (Control ctrl in parent)
{
if (ctrl.Name.Equals(controlName))
{
c = ctrl;
return c;
}
if (ctrl.GetType() == typeof(ToolStrip))
{
foreach (ToolStripItem item in ((ToolStrip)ctrl).Items)
{
if (item.Name.Equals(controlName))
{
switch (item.GetType().Name)
{
case "ToolStripComboBox":
c = ((ToolStripComboBox)item).Control;
break;
case "ToolStripTextBox":
c = ((ToolStripTextBox)item).Control;
break;
}
if (c != null)
{
break;
}
}
}
}
if (c == null)
c = GetControlByName(controlName, ctrl.Controls);
else
break;
}
return c;
}
答案 1 :(得分:0)
试试这个:
//for toolstrip
if (ctrl is ToolStrip)
{
ToolStrip ts = ctrl as ToolStrip;
foreach (ToolStripItem it in ts.Items)
{
if (it is ToolStrienter code herepSeparator)
{
//-------------------------
}
else
{
//do something
}
}
}//---------------