ShowDialogで得られる伝統的なOKまたはCancel状態、つまりカスタムダイアログフォームのテキストボックスからの文字列よりも多くの情報が必要です。DialogResultより多くの情報を含むカスタムShowDialog
私は論理が何であるのだろうか。
CustomDialog d = new CustomDialog();
DoStuffWith(d.ShowDialog().CustomString);
もちろん、戻り値のカスタムクラスが必要です。さんはこのようにそれを定義してみましょう:フォーム:
class CustomDialogResult
{
public string CustomString { get; private set; }
public CustomDialogResult(string customString)
{
this.CustomString = customString;
}
}
はその後、我々は我々のCustomDialogでShowDialogメソッドをnewverrideする必要があると思います。私は、フォームのペアレント表示から始めることができると推測しています。また、イベントハンドラを[OK]ボタンに追加すると、結果が設定されます。
public CustomDialogResult CustomDialogResult { get; private set; }
private void buttonOK_Click(object sender, EventArgs e)
{
this.Result = new CustomDialogResult(this.TextBoxCustom.Text);
this.Close();
}
public CustomDialogResult ShowCustomDialog()
{
this.Show(Form.ActiveForm);
}
ご覧のとおり、問題は[OK]ボタンがクリックされるのを待ってから、これを返すことになります。私は、Thread.Sleep(0)またはManualResetEventを使用することができますが、それはダイアログフォームの入力をブロックします。私はこのことについてどうやって行くのですか?私は醜い構文を使うことができることを知っていますが、ShowDialogがうまくいけば、できることがあります。 :)
D'オハイオ州のように見えます!とても簡単。確かにこれを行うでしょう。ありがとう。 – Lazlo