2016-06-08 5 views
1

마우스 오른쪽 버튼을 클릭 할 때 목록 상자에서 항목을 선택하려고하고 ContextMenuStrip을 사용하여 내 옵션을 표시하지만, 컨트롤 (목록 상자)에 ContextMenuStrip이 표시됩니다.목록 상자에서 항목을 선택하면 ContextMenuStrip을 표시하는 방법

private void lbSMTPEmails_MouseDown(object sender, MouseEventArgs e) 
{  
     int SelectedIndex = lbSMTPEmails.IndexFromPoint(e.X, e.Y); 

     if (SelectedIndex == -1) 
      lbSMTPEmails.ContextMenuStrip.Hide();    
     else 
     { 
      lbSMTPEmails.SelectedIndex = SelectedIndex; 
      lbSMTPEmails.ContextMenuStrip.Show(); 
     } 
} 

어떻게이 문제를 해결하는 어떤 생각을합니까 :

이것은 내가 코드가 무엇인가?

+0

opening 이벤트! 목록 상자에서 항목을 선택하면 contextmenustrip이 표시되고 목록 상자 안을 클릭하면 항목이 다시 선택되지 않습니다. 그런 다음 contextmenustrip이 표시되지 않습니다. – Akhilesh

+0

왜 작동하지 않는지, 다른 해결책을 찾았습니다. 여기에 게시하겠습니다. –

답변

1

나는이 방법으로 해냈다!

private void listbox_MouseDown(object sender, MouseEventArgs e) 
{ 
    ShowMenuStrip = listbox.IndexFromPoint(e.Location) >= 0; //This is a global bool variable 

    if (ShowMenuStrip) 
     listbox.SelectedIndex = listbox.IndexFromPoint(e.Location); 
    else 
     listbox.SelectedIndex = -1;   
} 

private void ContextMenuStrip_Opening(object sender, CancelEventArgs e) 
{ 
    e.Cancel = !ShowMenuStrip; 
} 
2

사용 ContextMenuStrip

void cms_Opening(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    int SelectedIndex = lbSMTPEmails.IndexFromPoint(lbSMTPEmails.PointToClient(Cursor.Position)); 

    if (SelectedIndex == -1) 
     e.Cancel = true;   
    else 
    { 
     lbSMTPEmails.SelectedIndex = SelectedIndex;    
    } 
} 
이 코드는 나를 위해 노력하고 있습니다