2012-11-05 3 views
1

에 ToolStripMenuItems의 속성을 수정할 수 없습니다, 내가 좋아하는 뭔가를하고 있어요 :자신의 온 클릭 이벤트 내 onClick 이벤트 핸들러에

private void myToolStripItem_Click(object sender, EventArgs e) 
    { 
     Form form = (Form)(((taskBarToolStripMenuItem)sender).formReference); 

     if (form != this.ActiveMdiChild) 
     { 
      if (!form.Visible) 
       form.Show(); 
      form.Activate(); 

      ((taskBarToolStripMenuItem)sender).isSelected = true; //set it to true, so the renderer will draw them differently 
     } 
    } 

을 taskBarToolStripMenuItem은 ToolStripMenuItem의 서브 클래스입니다. 내 사용자 지정 ToolStripSystemRenderer에 도착하면 item에 "isSelected"속성이 true로 변경되고 false로 유지되는 항목이 있는지 확인합니다. 이 문제는 다른 속성에서 발생합니다. 태그, 텍스트 등을 시도했습니다 ... 이유가 무엇입니까? 감사합니다

답변

0

당신이하려는 것은 senderToolStripMenuItem의 인스턴스로 캐스팅하는 것입니다.
대신에 캐스팅을 시도하십시오.

여러 위치에서 사용할 계획이라면 매번 상자 열기를 피하기 위해 임시 변수로 설정할 수 있습니다.

private void myToolStripItem_Click(object sender, EventArgs e) 
{ 
    var item = (ToolStripMenuItem)sender; // temp variable 
    Form form = (Form)(item.formReference); 

    if (form != this.ActiveMdiChild) 
    { 
     if (!form.Visible) 
      form.Show(); 
     form.Activate(); 

     item.Selected = true; //set it to true, so the renderer will draw them differently 
    } 
} 
+0

나는 그것을 시도했다 : var item = (ToolStripMenuItem) sender; item.Tag = "MYTAG"; . 그런 다음 렌더러의 "OnRenderMenuItemBackground"에서 Console.WriteLine ((ToolStripMenuItem) e.Item.Tag); 나는 널이된다. 아무 것도 MenuItems 속성을 다시 쓸 수 있습니까? 나는 "var item ="과 "e.Item"이 같은 참조임을 확신한다. – francis

+1

이 렌더러를 다른 아이템의 렌더러와 섞지 않았습니까? 코드에서이 작업을 시도해야만했습니다. – helgeheldre

+0

@helgeheldre 확신합니다. 사실, myToolStripItem_Click() 내에서 item.Text = "Change"와 같은 항목을 처리하면 항목의 텍스트도 변경되지 않습니다. 어떤 이유로 든 보낸 사람 개체가 내 경우에 참조로 전달되지 않는 것 같습니다. 그래서 원본 개체를 수정할 수 없습니다. – francis