16

.NET 3.5MDIWinFormsアプリケーションがあります。

子フォームのIconプロパティを設定すると、フォームの左上隅にアイコンが正しく表示されます。次に、子フォームを最大化しますが、アイコンは引き続きOKです。

子フォームを最大化したまま、別の子ウィンドウを開きます。これは自動的に最大化されます。このフォームのアイコンは、Iconプロパティ内のアイコンではなく、デフォルトの.NETアイコン(青、赤、黄色の四角が付いたアイコン)です。ただし、 MDI親フォームのサイズを変更すると、アイコンが自動的にリセットされ、正しく表示されます。

誰かが回避策を持っているか、これが起こる理由を知っていますか?

4

9 に答える 9

12

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

これにより、(他のフォームの場合と同じように)デザイン時にアイコンを設定でき、ハードコードされたファイルやリソースにアクセスする必要がありません。

于 2011-07-15T00:26:28.917 に答える
9

確かに私は解決策を見つけました...

この回避策は、次のように子フォームのロードイベントにアイコンを再度設定することです。

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カラヌス

于 2009-06-28T16:48:39.980 に答える
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);

これは、MSDNフォーラムのこの返信で提供された解決策であり、私にとってはうまくいきました。

于 2009-09-21T10:34:29.980 に答える
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;
}
于 2011-07-03T10:05:19.877 に答える
2

これで問題も解決することがわかりました。

myForm.WindowState = FormWindowState.Normal;
myForm.Show();
myForm.WindowState = FormWindowState.Maximized;
于 2011-07-19T08:31:40.030 に答える
1

私の解決策:MdiChildの「ShowIcon」プロパティをtrueに設定したままにして、1x1の透明なアイコンを割り当てます。問題が解決しました。

于 2010-05-03T19:01:24.503 に答える
1
form.WindowState = FormWindowState.Normal
form.Show()
form.WindowState = FormWindowState.Maximized
form.Show()

私の問題を解決しました!

于 2010-10-01T20:21:33.973 に答える
1

これをMDIChildrenのForm_Loadメソッドの最初の行として追加すると、次のように機能します。

this.Icon = new Icon(this.Icon, this.Icon.Size);
于 2012-11-14T04:25:57.330 に答える
0

この問題を修正するために私が見つけた最善の回避策はここにあります。

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
于 2010-09-30T13:48:11.800 に答える