2012-08-11 9 views
2

전화가 무엇인지 또는 무엇을 올려야하는지 잘 모르겠습니다. 나는 함께 붙인리스트 박스와 ContentMenuStrip을 사용하고있다. listBox1.ContextMenuStrip = contextMenuStrip1;목록 상자의 항목에 대한 메뉴?

나는 나의 목록 박스를 마우스 오른쪽 버튼으로 클릭하고 '제거'와 같은 것을 선택할 수있다. 지금 가지고있는 것을 사용하여 목록 상자의 아무 곳이나 클릭 할 수 있으며 결과에 현재 선택된 항목을 적용합니다. 혼란스럽고 오류가 발생하기 쉽습니다.

어떻게하면 마우스 오른쪽 버튼을 실제로 요소에 매핑하고 요소 위에 올랐을 때 오른쪽 클릭 메뉴를 표시하지 않을 수 있습니까 (목록 상자의 빈 공간).

답변

2

쉬운 해결책 (내가 아는 것을 완전히 요구하지는 않음)은 메뉴가 열리기 전에 항목이 선택되었는지 확인하는 것입니다.

이벤트는 에 등록하고 항목을 선택하지 않으면 취소합니다. 내가

[편집]을

확인 쿨의 ListBoxIndexFromPoint 방법이있어 내가 업데이 트됩니다 더 영리한 뭔가 :) 생각한다면

. 마우스를 사용하여 항목 위에 있는지 확인할 수 있습니다! 코드 샘플이 필요하면 알려주세요.

[EDIT2]

OK, OK, 여기 .. ​​나 자신을 도울 수 없습니다 당신은 갈 :

void ContextMenuStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     if (listBox1.IndexFromPoint(listBox1.PointToClient(Cursor.Position)) == -1) 
      e.Cancel = true; 
    } 
+0

아주 멋진. 지금 바로 구현할 것입니다. –

+0

완료, 예상대로 작동합니다. 이제 남은 모든 것들이 내가 선택한 그림자가 보이지 않는 것을 보여줄 수 있는지를 알아내는 것일뿐입니다. –

+0

니스, 나는 그것이 효과적이라고 생각합니다. (나 자신을 시도하지 않았고, 효과가 있다고 생각했습니다). 난 정말 당신이 그림자를 원하는지 이해가 안돼 ..하지만 만약 당신이 영상과 놀고있어 .. 당신은 WPF와 XAML 대신 Winforms를 사용하는 것이 낫다. –

관련 문제