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

时间:2009-05-20 16:11:22

标签: .net winforms icons mdi

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

我设置了一个子表单的Icon属性,该图标在表单的左上角正确显示。然后我最大化子表单,图标仍然正常。

在子窗体仍然最大化的情况下,我打开另一个子窗口,该窗口自动最大化。此表单的图标不是Icon属性中的图标,而是默认的.NET图标(带有蓝色,红色和黄色方块的图标)。但是,如果我调整 MDI父表单,该图标将自行重置并正确显示。

有没有人有解决方法或知道为什么会这样?

9 个答案:

答案 0 :(得分:11)

对Calanus解决方案稍作修改:

    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;
    }

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

答案 1 :(得分:9)

对,我找到了解决方案......

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

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");
}

这意味着您必须首先将有问题的图标文件添加到VS项目/解决方案中,并将其设置为“始终复制”,以便在构建解决方案时复制该文件。

HTH 哲

答案 2 :(得分:4)

我发现唯一的解决方案是停用然后重新激活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中给出的解决方案,它对我有用。

答案 3 :(得分:3)

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;
}

答案 4 :(得分:2)

我发现这也可以解决问题。

myForm.WindowState = FormWindowState.Normal;
myForm.Show();
myForm.WindowState = FormWindowState.Maximized;

答案 5 :(得分:1)

form.WindowState = FormWindowState.Normal
form.Show()
form.WindowState = FormWindowState.Maximized
form.Show()

解决了我的问题!

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我找到解决此问题的最佳解决方法是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

答案 8 :(得分:0)

将此作为MDI中Form_Load方法的第一行添加为儿童:

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