如何定位不可见的菜单项

本文关键字:菜单项 何定位 定位 | 更新日期: 2023-09-27 18:08:59

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

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

private void mnuUpdate_Click(object sender, EventArgs e)

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

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

我右击事件处理程序,选择"查找用法*",并被引导到这里:

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

(这是一个早期的应用程序,早于。net的部分类优点,所以这是在同一个文件中)

在设计器中的表单上,当我从属性页组合框中选择"mnuUpdate"时,表单上的主菜单就会完全消失。

我怎样才能找到这个逃亡菜单项?窗体上没有弹出菜单或上下文菜单,只有主菜单控件…??

  • 唯一的其他用法是:

    如果(ResetConnectionFetchForm)mnuUpdate_Click(发送方,e);

是否有可能这只是一个幻影菜单项,应该转换为"常规旧"方法?

更新就像最聪明的乔治常说的:"越来越好奇。"现在我找到了这个:
public void btnCancel_Click(object sender, EventArgs e)

…虽然它在代码中的七个地方被调用,但表单上没有btnCancel…这是一个"假"按钮点击事件。哦,我的亚特兰大!!

因此,我用完全相同的代码(它不使用发送方或事件参数)的无参数私有方法替换了它。

如果写这一坨水果蛋糕糊意大利面的猫是故意想把下一只猫(我)逼疯的话,它的效果很好,会成为一个很好的坡式故事或希区柯克式电影。

…我明白了…死代码! !

如何定位不可见的菜单项

好了,谜底解开了。mnuUpdate被动态地(有条件地)添加到mnuSetup(这是一个带有Text属性"Fetch"的顶级菜单项),如下所示:

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

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

选择"mnuSetup"将突出显示"Fetch"菜单项,但选择"mnuUpdate"会使它比蟑螂更快地从光中跑掉。

所以现在奇怪的事情是:为什么菜单项不是动态地创建,而不是显式地创建,然后动态添加;猫给猫剥皮的方式似乎很奇怪。

我建议你把它变成"普通的旧菜单",这样别人就不会浪费时间去弄清楚了。

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

你可以使用。visible和。enabled来控制用户看到的内容