ShowDialog で得られる従来の OK またはキャンセル状態よりも多くの情報、つまりカスタム ダイアログ フォームのテキスト ボックスからの文字列が必要です。
どういう論理なのか気になります。私はそれを次のように呼びたいと思います:
CustomDialog d = new CustomDialog();
DoStuffWith(d.ShowDialog().CustomString);
もちろん、返される結果にはカスタム クラスが必要です。次のように定義しましょう。
class CustomDialogResult
{
public string CustomString { get; private set; }
public CustomDialogResult(string customString)
{
this.CustomString = customString;
}
}
次に、CustomDialog : Form の 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] ボタンがクリックされるのを待ってから this.Result を返すことにあります。Thread.Sleep(0) または ManualResetEvent を使用できますが、それではダイアログ フォームへの入力がブロックされます。これについてどうすればいいですか?醜い構文を使用できることはわかっていますが、ShowDialog がそれを適切に行うのであれば、できる方法が必要です。:)