2013-05-31 4 views
1

아이콘을 1x1 또는 투명 아이콘으로 설정할 수 있지만 사용자가 계속 클릭 할 수 있으므로 해당 솔루션이 마음에 들지 않습니다.mdiChild가 최대화되면 UltraToolbar에서 mdiChild 아이콘을 어떻게 숨길 수 있습니까?

private void mainMenuStrip_ItemEventHandler(Object sender, ToolStripItemEventArgs e) 
     { 
      if (e.Item.Text == "") 
      { 
       e.Item.Visible = false;//This will hide any toolstrip items that do not have text... ex. the SystemMenu. 
      } 
     } 

을하지만 UltraToolbarsManager.Toolbars이 이벤트가 없습니다 :

는 mdiParents mainMenuStrip 있다면 나는 같은 것을 할 수 있습니다.

mdiChild에 대해 ShowIcon을 false로 설정하면 mdiChild 양식이 최대화되지 않을 때만 작동합니다.

나는 또한 mdiChild SizeChanged 이벤트를 발생 과부하 내가 숨길 수있는 하나를 찾을 수 있는지 확인하기 위해 도구를 통해 반복 시도했지만 그 작동 중 하나를하지 않았다 :

private void MdiChild_SizeChanged(object sender, EventArgs e) 
     { 
      Form theForm = sender as Form; 
      switch (theForm.WindowState) 
      { 
       case FormWindowState.Maximized: 
        theForm.Icon = Icon.FromHandle(Properties.Resources.blank.GetHicon()); 
         foreach (UltraToolbar ut in UltraToolbarsManager1.Toolbars) 
         { 
          if (ut.IsMainMenuBar) 
          { 
           foreach (ToolBase tb in ut.Tools) 
           { 
            //This collection does not contain the one I want to hide. 

            // maybe? 
            if (tb is MdiMergePlaceholderTool) 
            { 
             tb.SharedProps.Visible = false; 
            } 
           } 
          } 
         } 
        break; 
      } 
     } 

UltraToolbarsManagerUltraToolbar는없는 것 같습니다 나는 시도하고 도구 모음에 병합되는 것을 제거하기 위해 처리 할 수있는 모든 이벤트 ...

이 나는 ​​또한이 정확한 질문은 ...하지만 대답되지 않습니다 http://www.infragistics.com/community/forums/t/33396.aspx

나는이 다른 게시물은 다음과 같이 상속 (100 개) 형태의 수정을 제외한 제안 무엇에 업데이트 된 링크입니다 나를 위해 옵션을 선택하지 않습니다 생각 : http://help.infragistics.com/Help/NetAdvantage/WinForms/2013.1/CLR4.0/html/Win_Creation_Filter.html

몇 가지 가능성 : - OnItemAdded 이벤트에서 항목을 숨 깁니다. - UltraToolbar에서 아이콘을 제거하십시오. 어쩌면 OnMerge 이벤트에서. - 아이콘을 숨기거나 제거 할 수없는 경우 상황에 맞는 메뉴를 취소하는 이벤트입니다. - 아이콘 항목에 대한 참조를 얻는 방법이 좋습니다.

미리 답변 해 주셔서 감사합니다.

답변

1

제공된 정보를 보면 UltraToolbarManager의 기본 모드를 사용하고 있다고 가정합니다. 리본 모드를 사용하는 경우 MDIChild 폼의 ShowIcon 속성을 통해 시스템 아이콘을 숨길 수 있기 때문입니다. 그 순간 우리는 아이콘이나 SystemMenu를 숨기기위한 그런 기능 (리본 모드 제외)을 구현하지 않았으므로이 작업을 해결할 수있는 두 가지 옵션이 있습니다. 옵션 1 : CreationFilter를 사용할 수 있습니다.예를 들면 :

public Form1() 
{ 
    InitializeComponent(); 
    ultraToolbarsManager1.CreationFilter = new HideIcon(); 
} 


class HideIcon : IUIElementCreationFilter 
{ 
    public void AfterCreateChildElements(UIElement parent) 
    { 

    } 

    public bool BeforeCreateChildElements(UIElement parent) 
    { 
     if (parent is PopupToolUIElement) 
     { 
      parent.Parent.ChildElements.Remove(parent); 
     } 
     return false; 
    } 
} 

당신은 포럼 스레드에서 샘플을 찾을 수 :

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
public static extern Int32 RemoveMenu(IntPtr hMenu, Int32 nPosition, Int32 wFlags); 

또는

[return: MarshalAs(UnmanagedType.Bool)] 
[DllImport("user32", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)] 
public static extern bool DestroyMenu(IntPtr menu); 

을이 작성자 : 당신이 구현하는 경우 http://www.infragistics.com/community/forums/t/33396.aspx

는 또 다른 가능한 방법은 수를 MDIChild 양식을 최대화하고 컨텍스트를 다시 만들 때 메뉴를 파괴 할 수있는 방법 뉴 때 사용하여 MDIChild 폼의 상태를 변경 :

[DllImport("user32", SetLastError = true, CharSet = CharSet.Auto)] 
public static extern IntPtr CreatePopupMenu(); 

난 당신이 CreationFilter

를 사용하는

당신은 어떤 질문이 있으면 알려줘이 작업을 해결하기 위해 당신을위한 최선의 선택이 될 수 있다고 생각 감사합니다

+0

감사! 생성 필터 코드가 완벽하게 작동했습니다. 아이콘이있는 것처럼 다른 메뉴 항목들도 들여 쓰지만 그걸 처리 할 수 ​​있습니다. – Soenhay