2013-05-31 35 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

相关问题