无法从字符串中找到控件

时间:2016-04-08 14:36:04

标签: c# click controls

我有一个自定义扩展方法(应该)通过字符串查找控件,并执行对该控件的单击。我已经设置了一个断点并且它已经进入if (c is ToolStripMenuItem)任何人都知道我哪里出错了?这是在WinForms上。

   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();
    }

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

ToolStripMenuItem不被视为控件,您必须改为使用其容器

if(c is MenuStrip)
{
    foreach(ToolStripMenuItem tsItem in ((MenuStrip)c).Items)
    {
        if (tsItem.Name == item)
        {
            tsItem.PerformClick();
        }
    }
}

答案 1 :(得分:1)

要查找所有嵌套项,您需要进行递归搜索。这是一个例子;它收集List<ToolStripMenuItem>中的所有项目并检查搜索到的名称。我已将该字符串添加到您的呼叫签名中..:

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);
}