-2

Form1 に 1 つのラベルがあります。

今、私は Form2 でいくつかの操作を実行しています。(私の form1 は既に開いています)

ここで、Form2 の何らかの方法で Form1 のラベルを更新したいと考えています。

        Form1 frm=new Form1();
        Label label = frm.label1;
        MethodInvoker action = () => label.Text = "Finished";
        label.BeginInvoke(action);

これは私がform1に書いたコードです。しかし、次の例外が発生しています。「ウィンドウハンドルが作成されるまで、コントロールで Invoke または BeginInvoke を呼び出すことはできません。」

それで、解決策は何ですか?

4

1 に答える 1

0

これはあなたのコードであり、あなたはすでに開いているForm2?と言いますか?既存のフォームを使用する代わりに新しいフォームを作成するため、この方法でForm1アクセスすることはありません。Form1

フォームをまだ表示していないため、このエラーが発生します。そのため、フォームにはがありませんHandle。によってウィンドウを表示する前にハンドルを強制することもできCreateHandleますが、この場合、それは解決策にはなりません。

Form2モーダルフォームですか?次に、新しいラベルテキストをのプロパティとして公開し、Form2で取得できますForm1

Form1

Form2 frm = new Form2();
frm.ShowDialog();
Label1.Text = frm.NewLabelText;

Form2

public string NewLabelText
{
   get { return this.myMethodToGetLabelText(); }
}

フォームがモーダルではなく、更新する必要がある場合は、おそらく使用するのが最善の策です。delegates

于 2012-08-20T08:06:20.297 に答える