代码之家  ›  专栏  ›  技术社区  ›  lc.

在.NET中创建新的最大化MDI子窗体时出现图标问题

  •  14
  • lc.  · 技术社区  · 15 年前

    我有一个.NET 3.5 MDI WinForms应用程序。

    我设置了一个儿童窗体的 Icon 属性,该图标将正确显示在窗体的左上角。然后我将子窗体最大化,图标仍然可以。

    子窗体仍然最大化 ,我打开另一个子窗口,它会自动出现最大化。此表单的图标不是中的图标 偶像 调整大小 在MDI父窗体中,图标会自动重置并正确显示。

    有没有人有解决办法或者知道为什么会发生这种情况?

    9 回复  |  直到 15 年前
        1
  •  12
  •   Tom    13 年前

        private void MdiBase_Load(object sender, EventArgs e)
        {
            // Fixes bug where loading form maximised in MDI window shows incorrect icon.
            this.Icon = Icon.Clone() as Icon;
        }
    

    这允许您在设计时设置图标(与其他表单一样),并且不需要任何硬编码文件或资源访问。

        2
  •  9
  •   Calanus    15 年前

    对,我找到了解决办法。。。

    解决方法是在子窗体的加载事件上再次设置图标,如下所示:

    private void StatsForm_Load(object sender, EventArgs e)
    {
        //bug that means you have to set the desired icon again otherwise it reverts to default when child form is maximised
        Icon = new System.Drawing.Icon("research.ico");
    }
    

    嗯 水蚤

        3
  •  4
  •   open-collar    15 年前

    我发现唯一的解决方案是停用然后重新激活MDI子项:

    document.Show();
    // Work-around for error in WinForms that causes MDI children to be loaded with the default .NET icon when opened maximised.
    ActivateMdiChild(null);
    ActivateMdiChild(document);
    

    这是中给出的解决方案 this reply on MSDN forums 这对我很有效。

        4
  •  3
  •   Christoffer Lette    12 年前
    private void frmChild_Shown(object sender, EventArgs e)
    {
        // Work-around for maximized BUG
        this.Icon = this.MdiParent.Icon;
        this.WindowState = FormWindowState.Normal;
        this.WindowState = FormWindowState.Maximized;
    }
    
        5
  •  2
  •   VisserP    12 年前

    我发现这也能解决问题。

    myForm.WindowState = FormWindowState.Normal;
    myForm.Show();
    myForm.WindowState = FormWindowState.Maximized;
    
        6
  •  1
  •   Jérôme Verstrynge Mark    13 年前
    form.WindowState = FormWindowState.Normal
    form.Show()
    form.WindowState = FormWindowState.Maximized
    form.Show()
    

    解决了我的问题!

        7
  •  0
  •   Jose Wales    14 年前

    我的解决方案: 将MdiChild“ShowIcon”属性设置为true,分配1x1透明图标。问题解决了。

        8
  •  0
  •   Drake    14 年前

    我发现解决此问题的最佳解决方法是 here

    aNewForm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
    AddHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged
    
    aNewForm.Show()
    aNewForm.WindowState = FormWindowState.Maximized
    
    RemoveHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged
    

    处理者

    Protected Sub Form_SizeChanged(ByVal sender As Object, ByVal e As EventArgs)
    
        If WindowState = FormWindowState.Maximized Then
            If FormBorderStyle <> FormBorderStyle.Sizable Then FormBorderStyle = FormBorderStyle.Sizable
        End If
    
    End Sub
    
        9
  •  0
  •   Dave Lucre    12 年前

    将其添加为MDI子项上Form_Load方法的第一行对我很有用:

    this.Icon = new Icon(this.Icon, this.Icon.Size);