C# 如何找到不可见的菜单项?

C# 如何找到不可见的菜单项?,c#,.net,winforms,menu,C#,.net,Winforms,Menu,我正在重构一系列代码,逐行查看 我遇到一个事件处理程序: private void mnuUpdate_Click(object sender, EventArgs e) …而且,不知道哪个菜单项叫做这个(菜单项的名称并不总是与其标签匹配,甚至不接近),令人好奇 窗体上的主菜单的子菜单中没有此类菜单项 我右键单击事件处理程序,选择“查找Usages*”,并在此处显示: this.mnuUpdate.Text = "Update"; this.mnuUpdate.Click += new Sys

我正在重构一系列代码,逐行查看

我遇到一个事件处理程序:

private void mnuUpdate_Click(object sender, EventArgs e)
…而且,不知道哪个菜单项叫做这个(菜单项的名称并不总是与其标签匹配,甚至不接近),令人好奇

窗体上的主菜单的子菜单中没有此类菜单项

我右键单击事件处理程序,选择“查找Usages*”,并在此处显示:

this.mnuUpdate.Text = "Update";
this.mnuUpdate.Click += new System.EventHandler(this.mnuUpdate_Click);
(这是一个在.NET的部分类善之前就已经存在的前洪水时期的应用程序,所以它在同一个文件中)

在设计器中的窗体上,当我从属性页组合框中选择“mnuUpdate”时,窗体上的主菜单将完全消失

我怎样才能找到这个逃逸的菜单项?表单上没有弹出菜单或上下文菜单,只有主菜单控件

  • 唯一的其他用途是:

    if(ResetConnectionFetchForm) mnuUpdate_单击(发件人,e)

这是否可能只是一个幻象菜单项,应该转换为“常规旧”方法

更新 正如最聪明的乔治曾经说过的,“好奇者和好奇者。”现在我发现:

public void btnCancel_Click(object sender, EventArgs e)
…虽然它是从代码中的七个位置调用的,但表单上没有btnCancel…这是一个“假”按钮单击事件。哦,我的兰塔

因此,我用一个无参数的私有方法替换了它,该方法的代码完全相同(它既不使用sender也不使用event args)

如果这只猫写了这张用水果蛋糕糊成的意大利面做成的小地球,故意要把下一只猫(我)逼疯的话,那它的效果很好,可以拍出一部爱伦·坡式的故事或希区柯克式的电影


…我明白了…死代码

好了,谜团解开了。mnuUpdate动态地(有条件地)添加到mnuSetup(这是一个具有文本属性“Fetch”的顶级菜单项),如下所示:

我认为从表单属性页面的组合框中选择mnuUpdate是因为此时没有可视表示

选择“mnuSetup”突出显示“Fetch”菜单项,但选择“mnuUpdate”会使它以比蟑螂更快的速度离开灯光


所以现在奇怪的是:为什么菜单项没有根据需要动态创建,而不是显式创建然后动态添加;对猫来说,剥皮似乎是一种奇怪的方式。

我建议你把它变成“常规的老菜单”,这样别人就不会浪费时间去弄清楚了

我-我会认为它是过时的代码,因为它没有Handles子句


您可以使用.Visible和.Enabled来控制用户看到的内容。

我建议使用
CTRL+F
查找它,然后搜索整个解决方案。FWIW:动态添加菜单项是一个更好的主意。
if (!mnuSetup.MenuItems.Contains(mnuUpdate))
{
    mnuSetup.MenuItems.Add(mnuUpdate);
    UpdateMenuItemSelectable = true;
}