2013-12-09 7 views
2

나는 PictureBox를 가지고 있습니다.ContextMenuStrip에서 마우스 오른쪽 버튼을 클릭하면 어떻게됩니까?

PictureBox를 마우스 오른쪽 단추로 클릭하면 내 ContextMenuStrip (마우스 오른쪽 단추 클릭 메뉴)이 나타납니다.

그 ContextMenuStrip은 ToolStripMenuItem (오른쪽 클릭 메뉴의 옵션 중 하나)입니다.

해당 옵션을 클릭하면 발생하는 이벤트를 처리하는 이벤트가 ToolStripMenuItem에 있습니다.


ToolStripMenuItem의 "Clicked"기능부터 시작합니다. 어떻게 든 PictureBox에 프로그래밍 방식으로 돌아갈 필요가 있습니다. 거기서 PictureBox를 수정할 수 있습니다.

ToolStripMenuItem -> ContextMenuStrip을 -> PictureBox를

나는 이것에 대해 어떻게 갈 것인가?

+0

하지 : 오른쪽 및 왼쪽 버튼을 모두 클릭 이벤트를 트리거 할 수 있기 때문에이 경우에, 당신은 대신,이 같은 이벤트 "이는 MouseUp"에서 작업을 처리해야, 클릭 이벤트에서 작업을 실행하지 않아야 나는 당신의 질문을 완전히 이해하고 있지만, Picturebox로 돌아가려면 포커스가 필요합니까? – KSdev

답변

1

메뉴 항목에 대한 클릭 이벤트 핸들러가, OnToolStripMenuItemClick 이름을 지정하면 문제에 접근 할 수있는 다음

물론
private void OnToolStripMenuItemClick(object sender, EventArgs e) 
{ 
    var menuItem = sender as ToolStripMenuItem; 
    var contextMenu = menuItem.Parent as ContextMenuStrip; 
    var pictureBox = contextMenu.SourceControl; 
} 

는, 변환 후 등록 정보를 액세스 할 때 null를 확인하는 것을 잊지 마세요 as.

+0

null을 확인하지 마십시오. a (캐스트)를 사용하면 큰 소리를 낼 수 있습니다. –

+0

menuItem.ToolStrip이 존재하지 않습니다. 두렵습니다. :( – GrassProgrammer

+0

@ GrassProgrammer, 제 사과, 그것은'Parent' 속성입니다 [http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripitem.parent(v=vs.110).aspx] ,'ToolStrip'이 아닙니다. 코드를 수정했습니다. – RePierre

0

나는 당신이 정말로 당신의 문제를 이해하고 있는지 모르겠다. 그러나 나는 당신이 오른쪽 버튼을 클릭하여 현재 작업을 취소하고 싶을 때 사용자가 picturebox로 돌아갈 수 있도록하고 싶다.

private void menuItemBack_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
      MessageBox.Show("back item is clicked"); 
     } 
     else 
     { 
      MessageBox.Show("I will come back."); 
      //do your return things here. 
     } 
    } 
관련 문제