0

MainWindow、MainWindowにあるusercontrol、およびusercontrolから表示するOtherFormがあります。MainWindowからusercontrolにパラメーターとしてOtherFormを送信しました。そしてusercontrolで私は呼んでOtherForm.showdialogいます。2回目に表示すると、「ウィンドウが閉じた後、表示を設定したり、Show、ShowDialog、またはWindowInteropHelper.EnsureHandleを呼び出せない」という問題が発生します。

コード

MainWindowクラス内

void Example()
{
   usercontrol.Load(new Otherform{ variable= 1 });
}

Usercontrolクラスで

private Window _form;
public void Load(window form)
{
    _form=form;
}

void ExampleInUSerControl
{
   _form.VerifyAccess();
   _form.Activate();
   _form.ShowActivated = true;
   _form.ShowDialog();
}
4

1 に答える 1

2

この場合のエラーメッセージは非常に正確です。ウィンドウを閉じると、完全に閉じられます。常にウィンドウを閉じるためShowDialog()、を呼び出すたびにウィンドウの新しいインスタンスを作成する必要がありますShowDialog()

あなたの例でこれを達成するための非常に簡単な方法の1つは、Loadイベントに次のタイプの引数をとらせることですFunc<Window>

メインウィンドウ:

private Window MakeWindow()
{
   return new MyWindow();
}

private void Example()
{
   usercontrol.Load(MakeWindow);
}

ユーザーコントロール:

public void Load(Func<T> makeWindow)
{
   _form = makeWindow();
   ...
}

Activateちなみに、呼び出したり設定したりする理由はないはずですShowActivated-ShowDialogそれはすべて行います。そして、なぜあなたがVerifyAccessどちらかを呼ぶのか分かりません。

于 2010-10-02T17:31:00.900 に答える