我有一个.NET 3.5 MDI WinForms应用程序。
我设置了一个子表单的Icon
属性,该图标在表单的左上角正确显示。然后我最大化子表单,图标仍然正常。
在子窗体仍然最大化的情况下,我打开另一个子窗口,该窗口自动最大化。此表单的图标不是Icon
属性中的图标,而是默认的.NET图标(带有蓝色,红色和黄色方块的图标)。但是,如果我调整 MDI父表单,该图标将自行重置并正确显示。
有没有人有解决方法或知道为什么会这样?
答案 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);