0

私はWinFormアプリを開発しています。form1 はメイン ウィンドウで、form2 は設定用です。両方のフォーム間の相互作用にこのメソッドを使用しています:

form1 のコード:

   private void startForm2_Click(object sender, EventArgs e)
   {
       Form2 frm = new Form2(this);
       frm.Show();
   }
   public void changeFontSize() //promenq razmera na shrifta
   {
       ...
   }

form2 のコード:

Form1 F1 = new Form1();

public Form2(Form1 aF1)
{
    InitializeComponent();
    F1 = aF1;
}
private void button1_Click(object sender, EventArgs e)
{
    F1.changeFontSize();
}

form2 を閉じると、例外がスローされます。

破棄されたオブジェクトにアクセスできません。オブジェクト名:「アイコン」。

列をなして

protected override void Dispose(bool disposing)
{
    ChangeClipboardChain(this.Handle, nextClipboardViewer); // Clean up any resources being used.
    ...

Form1.Designer.cs ファイルで。

4

2 に答える 2

1

Form F1 = new Form1();フィールドはForm F1;. 現在、Form1まったく使用されていない新しいインスタンスを作成しています (コンストラクターのフィールドを上書きします)。これは、GC によって非決定論的に破棄および収集されます。

この「隠された」インスタンスが、破棄中に問題を引き起こす可能性が最も高いです。

そのメソッドをイベント ハンドラー内に移動することもできますが、その方がForm.FormClosed確実にDisposeメソッドに適しているように見えます。

于 2013-09-12T12:14:09.007 に答える
0

Form2 の終了イベントですべてのリソースを破棄する必要があります。

于 2013-09-12T12:12:10.100 に答える