2009-06-03 2 views
1

특정 플래그가 설정되어 있지 않은 경우 contextmenustrip을 숨길 수있는 요구 사항이 있습니다. 컨텍스트 메뉴 스트립의 표시/숨기기를 명시 적으로 제어 할 수 있다고 생각하지 않기 때문에 마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴 스트립과 연결된 컨트롤을 클릭하기로 결정했습니다. 그것은 UserControl, 그래서 그것을 처리 MouseClick 이벤트를 내가 플래그가 설정되어 있는지 확인하고 단추가 오른쪽 단추를 경우. 그러나 놀랍게도 마우스 오른쪽 클릭시 이벤트가 실행되지 않고 왼쪽 클릭 이벤트 만 발생합니다.ContextMenuStrip이 C#에서 로딩되지 않도록 명시 적으로 금지합니다.

나에게 문제가 있거나 해결 방법이 있습니까? 내가 컨트롤에 MOUSE_DOWN 이벤트를 취급 할 때

오른쪽 클릭이 감지 질문 제목과 설명이 좀 더 연구를 수행 한 후

을 변경지고, 난, 발사 할 수있는 오른쪽 클릭하면 있어요. 그러나 아직 우둔한데, 이 ContextMenuStrip을 명시 적으로 금지하는 방법은입니다. 또 다른 질문은 마우스 클릭이 오른쪽 버튼 클릭을 감지하지 못했기 때문입니다.


현재 해결 방법

이 내가하고있어 현재 해결되는 이벤트 핸들러

userControl1.Control1.MouseDown += new MouseEventHandler(Control1_MouseDown); 

void Control1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right && flag == false) 
     { 
      userControl1.Control1.ContextMenuStrip = null; 
     } 
     else 
     { 
      userControl1.Control1.ContextMenuStrip = contextMenuStrip1; 
     } 

    } 

등록. 하지만 ContextMenuStrip의 Opening 이벤트에서 어떻게 변경합니까?

+0

코드를 게시 할 수 있습니까? – NinethSense

+0

질문에 새로 삽입 된 "로드 중"이란 무엇을 의미합니까? 인스턴스를 만드는 것을 의미합니까? 아니면 이전에 보였던 것처럼 팝업을 의미합니까? – OregonGhost

+0

클릭 이벤트에 대한 설명은이 페이지 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.click.aspx에서 확인할 수 있습니다. 클릭 이벤트 – ChrisF

답변

2

키보드의 컨텍스트 메뉴 키 (또는 호출 된 항목)를 사용하여 컨텍스트 메뉴를 호출하면 솔루션이 실패합니다. Opening 이벤트를 사용하여 컨텍스트 메뉴 열기를 취소 할 수 있습니다.

+0

나는 오프닝 이벤트를 시도했지만 그걸 어떻게 바꿀 수 있습니까? 어떻게 열지 못하게합니까? –

+0

문서 읽기부터 시작할 수 있습니다. Opening 이벤트는 CancelEventArgs 매개 변수를 가져옵니다. 여기서 매개 변수를 취소하려면 Cancel을 true로 설정해야합니다. – OregonGhost

+0

CancelEventArgs.Cancel을 true로 설정하십시오. – Ants

1

해결 방법이 있습니다.

이 메뉴 항목 A가 A의 클릭 이벤트에서 제어 B.

상황에 맞는 메뉴를 제어하는 ​​플래그를 설정 말할 수 있습니다, 당신은 그것을 떨어져 전환 할 b.ContextMenu = 아무것도 설정하지, 다시 b.ContextMenu을 설정 다시 컨텍스트 메뉴 컨트롤로 되돌립니다.

+0

나 한테 해킹 같은 소리. 메뉴를 팝업 할 수있는 컨트롤이 여러 개있는 경우 유지 관리가 어려울 수 있습니다. – OregonGhost

0

WinForms에는 오른쪽 마우스 클릭을 위해 실행되는 Click 이벤트도 있습니다.

WPF를 사용하는 경우 MouseRightButtonDownMouseRightButtonUp 이벤트가 있어야합니다.

어떤 컨트롤이 어떤 클릭 이벤트를 발생시키는지를 보여주는 MSDN page의 표를 확인하십시오. 주목할 만하게, Button, CheckBox, RichTextBox 및 RadioButton (및 몇몇 다른 사람들)은 마우스 오른쪽 버튼으로 클릭 및 이벤트를 발생시키지 않습니다.

관련 문제