문제

특정 플래그가 설정되지 않은 경우 컨텍스트 메뉴 스트립을 숨겨야 한다는 요구 사항이 있습니다.컨텍스트 메뉴 스트립의 표시/숨기기를 명시적으로 제어할 수 없다고 생각하기 때문에 컨텍스트 메뉴 스트립과 연관된 컨트롤에서 마우스 오른쪽 버튼 클릭을 트랩하기로 결정했습니다.그것은 UserControl이므로 플래그가 설정되어 있고 버튼이 오른쪽 버튼인지 확인하는 MouseClick 이벤트를 처리해 보았습니다.그러나 놀랍게도 이 이벤트는 마우스 오른쪽 버튼 클릭 시에는 실행되지 않고 왼쪽 클릭 시에만 실행됩니다.

나에게 문제가 있는 걸까요, 아니면 해결 방법이 있나요?

오른쪽 클릭이 감지되어 질문 제목 및 설명이 변경되었습니다.

좀 더 조사한 후 컨트롤에서 Mouse_Down 이벤트를 처리할 때 rightclick이 실행되도록 했습니다.그러나 나는 아직도 아무것도 모른다. ContextMenuStrip이 로드되는 것을 명시적으로 방지하기 위해.또 다른 질문은 MouseClick이 오른쪽 버튼 클릭을 감지하지 못하는 이유입니다.


현재 해결 방법

이벤트 핸들러 등록

   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 컨텍스트 메뉴의 시작을 취소하는 이벤트.

다른 팁

해결 방법이 있습니다.

메뉴 항목 A가 컨트롤 B의 상황에 맞는 메뉴를 제어하는 ​​플래그를 설정한다고 가정해 보겠습니다.

A에 대한 클릭 이벤트에서 b.ContextMenu = Nothing을 설정하여 끄고 b.ContextMenu를 다시 컨텍스트 메뉴 컨트롤로 설정하여 다시 켭니다.

WinForms에는 Click 이벤트 - 마우스 오른쪽 버튼을 클릭하면 시작됩니다.

WPF를 사용한다면 MouseRightButtonDown 그리고 MouseRightButtonUp 이벤트.

이에 대한 표를 확인해보세요 MSDN 페이지 어떤 컨트롤이 어떤 클릭 이벤트를 발생시키는지 나열합니다.중요하게도 Button, CheckBox, RichTextBox 및 RadioButton(및 기타 몇 가지)은 마우스 오른쪽 버튼 클릭 시 이벤트가 발생하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top