2013-05-31 55 views
1

我可以將圖標設置爲1x1或透明圖標,但我不喜歡該解決方案,因爲用戶仍然可以點擊該圖標。如何在mdiChild最大化時隱藏UltraToolbar中的mdiChild圖標?

我可以做這樣的事情,如果它是mdiParents mainMenuStrip:

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沒有這個事件。

將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事件中。 - 如果無法隱藏/移除圖標,則取消上下文菜單的事件。 - 獲取對Icon項目的引用的一些方法會很好。

在此先感謝您的答覆。

回答

1

查看提供的信息,我想你正在使用UltraToolbarManager的默認模式,因爲如果你使用Ribbon模式,那麼你可以通過你MDIChild窗體的屬性ShowIcon隱藏系統圖標。 那時我們沒有實現這樣的功能(Ribbon功能除外)來隱藏Icon或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表格並重新創建我的環境時,你可以摧毀你的菜單NU使用時更改您的MDIChild表單的狀態:

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

我認爲,如果你正在使用CreationFilter

讓我知道,如果你有任何問題,爲您解決這個任務的最佳選擇可能是 問候

+0

謝謝!創建過濾器代碼完美工作。它仍然會縮進其他菜單項,就像圖標在那裏一樣,但我可以處理它。 – Soenhay

相關問題