我正在重构一段代码,逐行查看。
我遇到了一个事件处理程序:
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来控制用户看到的内容