0

私はできる限り最善を尽くして説明します。

クラスInputBoxとメソッドを使用していますshutownTime

class InputBox
{
    public static DialogResult shutdownTime(string title, string promptText, ref string value)
    {

そして、私は値を返しています

DialogResult dialogResult = form.ShowDialog();      
return dialogResult;

別のメソッドでは、別のクラスから値を渡しています。

string title2 = "Shutdown Timer";
string promptText = "How long would you like to delay the shutdown in minutes?";
string value = "0";          
InputBox.shutdownTime(title2, promptText, ref value);

すべて正常に動作しますが、[OK] ボタンを押すと、shutdownTimeメソッドから [キャンセル] ボタンを押すと、デバッグで戻り値が [キャンセル] であることが示されます

//shutdownTime()

buttonOk.DialogResult = DialogResult.OK;
buttonCancel.DialogResult = DialogResult.Cancel;

取得できないのは、キャンセルを押した場合、使用後にその値を確認するにはどうすればよいですか

InputBox.shutdownTime(title2, promptText, ref value);

[OK] または [キャンセル] を押すと、コードが引き継がれるからです。

私は理にかなっていると思います、ありがとう

4

3 に答える 3

0

から返された値を格納しますshutdowTime()

var result = InputBox.shutdownTime(title2, promptText, ref value);

そして、その値をテストします

if (result == DialogResult.OK)
{
    // Do something
}
于 2013-12-28T10:27:27.127 に答える
0

純粋なモーダル ダイアログの場合、有用なパターンは、結果を保持するオブジェクトを作成することです。例えば

public class InputBox
{
  public class Result //
  (
    DialogResult : ModalResult {get; private set;}
    DateTime : ShutDown {get; private set;}
    ... // more fields as needed
  )
}

public Show()
{
  var result = new Result(); // do not store within form -- prevent G/C of form
  using (myform = new InputBox())
  {
      // pseudocode
      // myform.Initialize();
      // 
      result.ModalResult = myform.ShowDialog(...);  // return
      result.ShowDownTime = myform.controlShutDownTime.Value;
      // myform.Finalize();
  }
}

}

モーダル ダイアログ クラスで、モーダル フォームを作成し、それを呼び出し、返す前に内部の Result オブジェクトを詰め込む public static メソッドを追加します (上記の疑似コードの Show())。必要に応じて、メソッドの複数のバージョンを使用できます。

于 2013-12-28T10:38:58.747 に答える