2011-03-05 51 views
0

根据Cody对this question的回答,我从ContextMenuStrip中派生出一个类并处理ProcessCmdKey。当按下输入时,此功能可成功阻止菜单关闭,而菜单中嵌入的文本框具有焦点。所以一切都很好,除了一件事。Panel.Dispose关闭上下文菜单,为什么?

在Enter按钮上,我从菜单中删除了文本框,并且处置该控件导致菜单关闭。当我这样做时:

If (m_inputPanel IsNot Nothing) Then m_inputPanel.Hide() 
If (m_inputPanel IsNot Nothing) Then m_inputPanel.Parent.Controls.Remove(m_inputPanel) 
If (m_inputPanel IsNot Nothing) Then m_inputPanel.Dispose() 

菜单已关闭。当我将第三行注释掉时,菜单仍然打开。 (顺便说一句,m_inputPanel.Parent是一个自定义控件,它使用ToolStripControlHost嵌入到菜单中)

为什么在上帝的绿色地球上放置一个不再是菜单一部分的控件?

+2

检查此答案为更好的方式:http://stackoverflow.com/questions/5207767/net-multiple-toolstripbuttons-in-a-single-contextmenuitem/5207964#5207964 – 2011-03-06 01:12:06

+1

我刚注意到这个问题,并感觉有点不得不回复,因为我是给你最初解决方案的人。在这种情况下,我同意汉斯。我试图在你之前的问题的评论中建议我不认为使用“ContextMenuStrip”是解决你的问题的最佳方法,但由于直接解决方案非常简单,我试图提供一个有用的答案。如果你浪费了一大堆时间让CMS工作,我很抱歉。我在这里不知道解决方法;我自己并没有使用CMS,原因很多,包括Hans讨论的脆弱行为。 – 2011-03-06 07:52:29

+0

@Cody,完全没有。我非常感谢你的回答。处理问题可能还没有被克服,即使不是,我总能想出一种方法将这些控件添加到某些列表中,以便在菜单关闭后处理。 – 2011-03-06 09:44:06

回答

1

当您这样做时,您将从上下文菜单中删除焦点,因为当您将其移除时,焦点已置于文本框中,因此ContextMenuStrip中没有任何焦点。

+0

因此,不要配置文本框,而是将它从菜单中作为控件移除*不会*删除焦点?嗯,奇怪。尽管它解释了发生的事情。我会尝试在处理之前将焦点设置回菜单,看看是否有帮助。 – 2011-03-05 22:37:15

+0

@DavidRutten这是一个有趣的问题,我会想象它是控件的一些奇怪的警告。 – msarchet 2011-03-05 23:22:18

+0

这是一个很好的理论。不幸的是,当面板被隐藏并且不处理时,也应该关闭CMS。 – 2011-03-05 23:36:27