C# Can';无法从字符串中定位控件
我有一个自定义扩展方法,它(应该)通过字符串找到一个控件,然后单击该控件。我设置了一个断点,如果(c是ToolStripMenuItem)有人知道我哪里出错了吗?这是在WinForms上C# Can';无法从字符串中定位控件,c#,click,controls,C#,Click,Controls,我有一个自定义扩展方法,它(应该)通过字符串找到一个控件,然后单击该控件。我设置了一个断点,如果(c是ToolStripMenuItem)有人知道我哪里出错了吗?这是在WinForms上 private void PerformClickfromString() { string item = File.ReadAllText(@"C:\controltest.txt"); foreach (var c in this.Controls)
private void PerformClickfromString()
{
string item = File.ReadAllText(@"C:\controltest.txt");
foreach (var c in this.Controls)
{
if (c is ToolStripMenuItem)
{
var x = (ToolStripMenuItem)c;
if (x.Name == item)
{
x.PerformClick();
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
PerformClickfromString();
}
非常感谢您的帮助。ToolStripMenuItem不被视为控件,您必须使用它的容器
if(c is MenuStrip)
{
foreach(ToolStripMenuItem tsItem in ((MenuStrip)c).Items)
{
if (tsItem.Name == item)
{
tsItem.PerformClick();
}
}
}
要查找所有嵌套项,需要进行递归搜索。这是一个例子;它收集
列表中的所有项目,并检查搜索的名称。我已将该字符串添加到您的通话签名中..:
private void PerformClickfromString(string s)
{
foreach (var c in this.Controls)
{
List<ToolStripMenuItem> items = new List<ToolStripMenuItem>();
if (c is MenuStrip)
{
foreach (ToolStripMenuItem tsItem in ((MenuStrip)c).Items)
{
GetAllMenuItems(items, tsItem);
}
}
ToolStripMenuItem found = items.Find(x => x.Name == s);
if (found != null) found.PerformClick();
}
}
void GetAllMenuItems(List<ToolStripMenuItem> items, ToolStripMenuItem menu)
{
items.Add(menu);
foreach(ToolStripMenuItem m in menu.DropDownItems)
GetAllMenuItems(items, m);
}
private void PerformClickfromString(字符串s)
{
foreach(此.Controls中的var c)
{
列表项=新列表();
如果(c是菜单项)
{
foreach(ToolStripMenuItem tsItem in((MenuStrip)c).Items)
{
GetAllMenuItems(项目,tsItem);
}
}
ToolStripMenuItem found=items.Find(x=>x.Name==s);
if(find!=null)find.PerformClick();
}
}
void GetAllMenuItems(列表项,ToolStripMenuItem菜单)
{
项目。添加(菜单);
foreach(菜单中的ToolStripMenuItem m.DropDownItems)
GetAllMenuItems(项目,m);
}
foreach语句无法对类型为的变量进行操作…不包含“GetEnumerator”的公共定义foreach语句无法对类型为“System.Windows.Forms.MenuStrip”的变量进行操作,因为“System.Windows.Forms.MenuStrip”不包含“GetEnumerator”
抱歉,我刚刚意识到我的错误,请立即尝试。没有错误,但也没有输出。有没有办法搜索所有ToolStripItemMenu对象?示例:文件>图层1>图层2。我要去第二层。只需搜索“文件”顶部TripS,您可以说如果(tsItem.Items!=null)
我很确定,这将检查子级别。我会在内部检查之前打印出所有x.名称,并查看到达了哪些控件。感谢您的解释和示例!工作完美。