2

C# アプリケーション用に 2 つのフォームがあります。メイン フォームのControlBoxは false に設定されており、次のように 2 番目のフォームが作成されます。

this.ControlBox = false;
new Form2().Show();

2 番目の形式は、最小化および最大化できます。ウィンドウが最小化されたとき、または通常の状態に戻ったときに、メイン フォームのWindowStateプロパティを子フォームから設定できるようにする必要があります。

私が抱えている問題は、子ウィンドウを最小化しようとするとプログラムがクラッシュすることです。

これは私のコードです:

private void Form2_SizeChanged(object sender, EventArgs e)
{
    if(this.WindowState != FormWindowState.Maximized)
        this.Parent.WindowState = this.WindowState;
}

どうすればこれを回避できますか?

4

2 に答える 2

5

あなたの問題は、Form2 Parentプロパティがnullであり、呼び出しShow()メソッドが実際にParent表示されたフォームのプロパティを設定しないことです(デバッガで確認してください)。最も簡単な回避策は、 (呼び出された)のコンストラクターを介してForm1(呼び出して) 参照を渡し、その参照を使用してプロパティを設定することです。このようなもの:FormForm2FormWindowState

public partial class Form2 : Form
{
    Form1 form1;
    public Form2(Form1 frm)
    {
        InitializeComponent();
        form1 = frm;
        this.SizeChanged +=Form2_SizeChanged;
    }

    private void Form2_SizeChanged(object sender, EventArgs e)
    {
        if (this.WindowState != FormWindowState.Maximized)
            form1.WindowState = this.WindowState;
    }
} 

Form1 のコードよりも、次のように変更できます。

this.ControlBox = false;
Form2 frm = new Form2(this);
frm.Show();
于 2013-04-24T23:32:43.770 に答える
3

フォーム 1 ( ) をフォーム 2 のパブリック プロパティに渡しthis、フォーム 2 で変更します

Form2 f = new Form2();
f.f1 = this;
f.Show();
// or: new Form2 { f1 = this }.Show();

フォーム 2:

public Form1 f1;
[...]
[Event:]
f1.WindowState = FormWindowState.Minimized;
于 2013-04-24T23:47:18.827 に答える