2009-06-11 140 views
4

我正在研究一个具有MDI容器主窗体的.NET C#应用程序。当用户最大化MDI孩子时,Windows在容器窗体的标题栏下绘制一个控制条,窗体上有儿童图标和右侧的系统按钮。基本上,我需要的是隐藏这个条,并使用自定义控件来提供相同的功能。当MDI Child最大化时删除MDI容器窗体的默认MDI菜单

有什么办法可以防止Windows绘制这个MDI条?

+1

偶然,你有没有取得任何进展?它也困扰着我,我正在考虑用一个奖励来回答一个问题。如果你还没有答案,我会打开一个新的赏金问题。 – SqlRyan 2009-06-22 22:15:45

回答

8

其实,我发现了一个简单而有趣的方式通过分配与虚拟MenuStrip控件窗体的MainMenuStrip属性删除从我的形式这个东西(不把它在表格控件集合):

private void OnForm_Load(object sender, EventArgs e) 
{ 
    this.MainMenuStrip = new MenuStrip(); 
} 

这样可以防止绘制默认的MDI标题,因为表单将其功能委托给其默认菜单条(如果有的话)。由于MenuStrip控件不在Form的Controls集合中,因此它也是不可见的,因此它只是当儿童最大化时用作隐藏讨厌的MDI菜单的虚拟菜单。

+2

先生,你是个天才。如果可以的话,我会+42。 – SqlRyan 2009-06-29 04:00:04

0

这从几年前的谈话表明,有没有办法做到这一点,他结束了与用户控件的主要形式,而不是实际使用的MDI接口:

http://answers.google.com/answers/threadview/id/135136.html

每其他线程我可以在网上找到,要么放弃,要么没有答案,要么死胡同。我不能相信这个功能,如果这么麻烦,而不是本地可用。

0

有比向每个表单的Load事件添加代码更简单的方法。只需将此代码放在MdiParent窗体中,并将​​MenuStrip替换为您用于MENUtrip控件的实际名称即可。

Private Sub MenuStrip_ItemAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemEventArgs) Handles MenuStrip.ItemAdded 
     Dim s As New String(e.Item.GetType().ToString()) 
     If s = "System.Windows.Forms.MdiControlStrip+SystemMenuItem" Then 
      e.Item.Visible = False 
     End If 
    End Sub