如何找到隐藏的菜单项?

时间:2013-04-12 19:04:13

标签: c# .net winforms menu

我正在重构一段代码,一行一行地查看。

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

private void mnuUpdate_Click(object sender, EventArgs e)

...而且,不知道哪个菜单项称为此菜单项(菜单项名称并不总是与其标签匹配,甚至接近),这很奇怪。

表单上的主菜单中没有这样的菜单项。

我点击了事件处理程序,选择了“查找用法*”并在此处被引导:

this.mnuUpdate.Text = "Update";
this.mnuUpdate.Click += new System.EventHandler(this.mnuUpdate_Click);

(这是一个早于.NET的部分类善的antedeluial应用程序,所以这是在同一个文件中)

在设计器的表单上,当我从属性页面组合框中选择“mnuUpdate”时,表单上的mainMenu将完全消失。

如何追踪这个逃犯菜单项?表单上没有popupMenu或contextMenu,只是mainMenu控件...... ???

  • 唯一的其他用法是:

    if(ResetConnectionFetchForm)     mnuUpdate_Click(发件人,e);

这可能只是一个应该转换为“常规旧”方法的幻像菜单项吗?

更新

最聪明的乔治曾经说过,“Curiouser和Curiouser。”现在我发现了这个:

public void btnCancel_Click(object sender, EventArgs e)

...虽然从代码中的七个位置调用,但表单上没有btnCancel ......这是一个“假”按钮点击事件。我的兰达啊!

所以,我用一个无参数的私有方法用完全相同的代码替换它(它没有使用sender或event args)。

如果那只写了这个充满水果蛋糕的意大利面条的猫是故意试图让下一只猫(我)疯狂,那它的效果非常好,并会制作一个优秀的爱伦坡式故事或希区柯克风格的电影。 / p>

......我明白了......死密码!!!

2 个答案:

答案 0 :(得分:1)

好的,神秘的解决了。 mnuUpdate动态地(有条件地)添加到mnuSetup(这是一个带有Text属性“Fetch”的顶级菜单项),如下所示:

if (!mnuSetup.MenuItems.Contains(mnuUpdate))
{
    mnuSetup.MenuItems.Add(mnuUpdate);
    UpdateMenuItemSelectable = true;
}

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

选择“mnuSetup”会突出显示“Fetch”菜单项,但选择“mnuUpdate”会使所有人都比光线中的蟑螂更快地赶走。

现在关于它的奇怪之处在于:为什么菜单项不是根据需要动态创建,而不是显式创建然后动态添加;对于一只猫皮肤猫来说,这似乎是一种奇怪的方式。

答案 1 :(得分:1)

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

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

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