我可以将图标设置为1x1或透明图标,但我不喜欢这种解决方案,因为用户仍然可以点击它。
我可以这样做如果它是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。工具栏没有此事件。
为mdiChild设置ShowIcon为false仅在mdiChild窗体未最大化时有效。
我还尝试重载mdiChild sizechange事件,并通过工具循环,看看我是否能找到一个隐藏,但也没有工作:
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;
}
}
ultratolbarsmanager和ultratolbar似乎没有任何我可以处理的事件来尝试和删除正在合并到工具栏中的东西…
这是我也有确切的问题…但没有回答: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事件中的项目。—移除工具栏上的图标。也许在OnMerge事件中。-如果图标不能被隐藏/移除,取消上下文菜单的事件。-某种方式获得一个引用的图标项目将是不错的。
提前感谢您的回复。
查看所提供的信息,我认为您正在使用我们的默认模式的UltraToolbarManager,因为如果你使用功能区模式,那么你可以隐藏系统图标通过属性ShowIcon的mdicchild窗体。当时我们没有实现这样的功能(除了功能区模式)来隐藏你的图标或系统菜单,所以你有两个可能的选择来解决这个任务。选项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;
}
}
您可以在我们的论坛帖子中找到示例:http://www.infragistics.com/community/forums/t/33396.aspx
另一种可能的方法是:
[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);
通过这种方式,您可以在最大化您的MDIChild表单时销毁您的菜单,并在使用
更改您的MDIChild表单状态时再次创建上下文菜单:[DllImport("user32", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr CreatePopupMenu();
我认为你解决这个任务的最佳选择可能是如果你使用creatationfilter
如果你有任何问题,请告诉我关于