0

状況は次のとおりです。プログラムで void 関数を呼び出し、OK とキャンセルのメッセージ ボックスを提供しますが、この関数はカプセル化されています。ユーザーが何をクリックしたかを知る必要があります。

とにかく、ユーザーの選択を知るためにこの関数をハイジャックすることはありますか?

または、プログラマーがこの関数を作成するとき、ユーザーが [キャンセル] をクリックしたときに void を返さなければならず、ユーザーが [OK] をクリックしても何も返さなかったと思います。これら2つのアクションを区別できる可能性はありますか? voidを返し、何も返さないのですか?

不可能に思えることはわかっていますが、それが私がstackoverflowに来て皆さんに尋ねる理由です。

ありがとうございました

4

2 に答える 2

2

void を返す関数の戻り値は 1 つだけ (何もない) であるため、何も返さない場合と を返す場合に違いはありませんvoid

既存の関数を変更できず、MessageBox を表示するだけの場合は、破棄して最初からやり直します。

あなたが望むのは次のようなものです:

public DialogResult GetDialogResult(string message, string caption)
{
    return MessageBox.Show(message, caption, MessageBoxButtons.OKCancel);
}

DialogResult.OK必要なメッセージとキャプションでそれを呼び出すと、またはのいずれかが返されますDialogResult.Cancel

MessageBox を表示するだけではない場合、唯一のオプションは、[OK] をクリックした場合に関数が行う変更を確認することです。次に例を示します。

  • [OK] が押された場合にのみレコードがデータベースに追加される場合、そのレコードを確認します
  • オブジェクトの状態が変化した場合は、その変化を確認します。

    OtherObject.SetValueIfOK(2);
    if (OtherObject.GetValue() == 2)
    {
        // OK was clicked
    }
    else
    {
        // Cancel was clicked
    }
    

それ以外は、おそらく運が悪いと思います。

于 2012-06-30T18:38:56.747 に答える
0

「void を返す」(と書くreturn;) ことは、何も返さないこととまったく同じです。

のようなものを返したいとしDialogResultます。.NET フレームワークは、やりたいことのために頻繁にDialogResult.OKandを使用します。DialogResult.Cancel

于 2012-06-30T18:32:01.057 に答える