2011-03-05 3 views
0

this question에 대한 Cody의 답변에 따르면 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 –

+1

방금이 질문에 주목하고 다소 느낍니다. 나는 당신에게 원래의 해결책을 준 사람이기 때문에 답장을해야만했다. 이 경우 한스와 동의합니다. 나는 당신의 이전 질문에 대한 의견에서 "ContextMenuStrip"을 사용하는 것이 당신의 문제에 대한 가장 일반적인 접근법이라고 생각하지는 않았지만, 즉각적인 해결책은 매우 간단하므로 도움이되는 대답을 제공하려했습니다. CMS를 작동시키는 데 많은 시간을 낭비했다면 유감입니다. 여기서 해결 방법을 모르겠습니다. 나는 Hans가 논의하는 허약 한 행동을 포함하여 여러 가지 이유로 CMS를 사용하지 않습니다. –

+0

@Cody, 전혀 아닙니다. 나는 당신의 대답에 대해 가장 감사하고 있습니다. Disposing 문제는 아직 해결되지 않았을지라도 메뉴가 닫힌 후에 처리 될 수있는 일종의 목록에 이러한 컨트롤을 추가하는 방법을 항상 파악할 수 있습니다. –

답변

1

포커스를 제거 할 때 포커스가있는 텍스트 상자 였기 때문에 상황에 맞는 메뉴에서 포커스를 제거하고 있습니다. 더 이상 포커스가없는 ContextMenuStrip에는 아무 것도 없습니다.

+0

그래서 텍스트 상자를 삭제하지 않고 메뉴에서 컨트롤을 제거하지 * 않습니다 * 포커스를 제거하지? 흠, 홀수. 비록 그것이 일어나고 있는지 설명하고 있습니다. 처리를하기 전에 메뉴로 포커스를 다시 설정해 보겠습니다. 도움이되는지 확인하십시오. –

+0

@DavidRutten 이것은 흥미로운 질문입니다. 컨트롤의 이상한 경고입니다. – msarchet

+0

훌륭한 이론입니다. 안타깝게도 패널이 숨겨져 있지 않을 때 CMS를 닫아야합니다. –

관련 문제