C#.NET MDIには2つの問題があります。バグhereを再現するVS2010ソリューションをダウンロードできます。C#.NET MDIのバグは、プログラムで最大化された子フォームを非表示にして表示し、最大化すると子フォームのアイコンを変更できない場合です。
1)最大化された子フォームをプログラムで隠して表示すると、再び最大化されず、最大化されず、通常の状態にもなりません。
子フォームが最大化されるとprogramicaly隠されて、再び示され、そして、それは(メニューバーに気づくください - 子フォームのコントロールボックスが表示されますが、子フォームが最大化されていない)、このようなものになりchildForm = new Form();
childForm.Text = "Child Form";
childForm.MdiParent = this;
...
private void showButton_Click(object sender, EventArgs e)
{
childForm.Visible = true;
}
...
private void hideButton_Click(object sender, EventArgs e)
{
childForm.Visible = false;
}
:
この段階では、子フォームを移動することはできません。しかし、ダミーの子フォームを表示して隠すだけで、実際の子フォームが適切に最大化されるようにすることで回避策を見つけました。しかし、これはMDI領域をちらつくようにします。メソッドを無効化、更新、更新しようとしましたが、役立たないことがあります。おそらく、このバグを克服し、ダミーの子フォームでMDI領域がちらつくのを防ぐための他の回避策がありますか?
private void workaround1Button_Click(object sender, EventArgs e)
{
dummyForm.Visible = true;
dummyForm.Visible = false;
}
2)子フォームが最大化されると、子フォームのアイコンがメニューバーに表示されます。ただし、子フォームが最大化されているときにアイコンを変更する必要がある場合、メニューバーのアイコンは更新されません(上記の画像を参照)。基本的にメニューバーを隠して表示する回避策も見つけました。アイコンがリフレッシュされますが、メニューバーの下のすべてが点滅します。メソッドを無効化、更新、更新しようとしましたが、役立たないことがあります。子フォームのアイコンを更新するためのメニューバーを作成する他の方法はありますか?また
private void workaround2Button_Click(object sender, EventArgs e)
{
menuStrip.Visible = false;
menuStrip.Visible = true;
}
私は親フォームが通常のウィンドウ状態モードのときに気づい(最大化されていない)、あなたは1つのピクセルで、フォームの幅や高さを変更する、それがあるべきとして子フォームが最大となると、メニューバーの子フォームのアイコンが適切に更新され、上記の他の回避策は必要ありません。プログラマティックなフォームのサイズを変更すると、1ピクセルずつちらつきが発生し、親フォームが最大化されたときにはできません。フォームのサイズを変更し、子フォームが正しく最大化され、メニューバーのアイコンがリフレッシュされるときに呼び出される再描画/更新機能を呼び出す方法はありますか?
はい、私が試してみましたが、何も変わりません。私はchildForm.Visible = true/falseがそれらのメソッドを呼び出すと思います。 – Povilas
実際には、それは逆になるはずです。非表示/表示は、表示をfalse/trueに設定する必要があります。 –