59 c# string controls accessibility winforms
我有一个名为"myMenu"的ToolStripMenuItem.我怎样才能这样访问:
/* Normally, I would do: */
this.myMenu... etc.
/* But how do I access it like this: */
String name = myMenu;
this.name...
Run Code Online (Sandbox Code Playgroud)
这是因为我从XML文件动态生成ToolStripMenuItems,需要通过动态生成的名称来引用menuitems.
Adr*_*der 113
使用Control.ControlCollection.Find方法.
试试这个:
this.Controls.Find()
Run Code Online (Sandbox Code Playgroud)
小智 36
string name = "the_name_you_know";
Control ctn = this.Controls[name];
ctn.Text = "Example...";
Run Code Online (Sandbox Code Playgroud)
Control GetControlByName(string Name)
{
foreach(Control c in this.Controls)
if(c.Name == Name)
return c;
return null;
}
Run Code Online (Sandbox Code Playgroud)
无视这一点,我重新发明轮子.
假设您有menuStrip对象并且菜单只有一个深度,请使用:
ToolStripMenuItem item = menuStrip.Items
.OfType<ToolStripMenuItem>()
.SelectMany(it => it.DropDownItems.OfType<ToolStripMenuItem>())
.SingleOrDefault(n => n.Name == "MyMenu");
Run Code Online (Sandbox Code Playgroud)
对于更深层菜单级别,在语句中添加更多SelectMany运算符.
如果要搜索条带中的所有菜单项,请使用
ToolStripMenuItem item = menuStrip.Items
.Find("MyMenu",true)
.OfType<ToolStripMenuItem>()
.Single();
Run Code Online (Sandbox Code Playgroud)
但是,请确保每个菜单都有不同的名称,以避免密钥重复引发异常.
为了避免异常,您可以使用FirstOrDefault而不是SingleOrDefault/ Single,或者如果您可能有Name重复项,则只返回序列.
使用Philip Wallace的相同方法,我们可以这样做:
public Control GetControlByName(Control ParentCntl, string NameToSearch)
{
if (ParentCntl.Name == NameToSearch)
return ParentCntl;
foreach (Control ChildCntl in ParentCntl.Controls)
{
Control ResultCntl = GetControlByName(ChildCntl, NameToSearch);
if (ResultCntl != null)
return ResultCntl;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
例子:
public void doSomething()
{
TextBox myTextBox = (TextBox) this.GetControlByName(this, "mytextboxname");
myTextBox.Text = "Hello!";
}
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助!:)
最好的方法之一是像这样的一行代码:
PictureBox在此示例中,我们按表单中的名称搜索所有内容
PictureBox[] picSample =
(PictureBox)this.Controls.Find(PIC_SAMPLE_NAME, true);
Run Code Online (Sandbox Code Playgroud)
最重要的是 的第二个参数find。
如果您确定控件名称存在,则可以直接使用它:
PictureBox picSample =
(PictureBox)this.Controls.Find(PIC_SAMPLE_NAME, true)[0];
Run Code Online (Sandbox Code Playgroud)
您可以在 Form 类中使用 find 函数。如果你想投射 (Label) ,(TextView) ...等,这样你就可以使用对象的特殊功能。它将返回 Label 对象。
(Label)this.Controls.Find(name,true)[0];
Run Code Online (Sandbox Code Playgroud)
name : 表单中搜索到的项目的项目名称
true:搜索所有 Children 布尔值
| 归档时间: |
|
| 查看次数: |
187843 次 |
| 最近记录: |