2016-04-10 2 views
-1

私はC#で新しく、非常に単純な質問をして申し訳ありません。ユーザに続行または中止を要求するダイアログを表示

私は2クラス、Form1.csTesting.cs

  1. を持っている私はTesting.csで関数を記述し、それは多くの処理ステップを持っています。私はすべてのステップで、ユーザーが次のステップの処理を続行したいことを確認する必要があります。彼らはそれをしたくない場合、処理を中止するために中止をクリックします。どうすればいいですか?ダイアログDialogResultTestingに呼び出すことができないため、これを行うことができます。

  2. クラステストでは、処理された各ステップの後に、ステータスが更新されます。私はこの文字列をフォームに即座に送信してテキストボックスにステータスを表示する方法を知らない。

本当にありがとうございます。

+3

から渡されたデリゲートを受け取るテストクラスの

Testing t = new Testing(); t.MultipleStepsOperation((string status) => { MessageBox.Show("Testing class calls Form class with status=" + status); }); 

を書き、MessageBox.Showの呼び出しの問題は何ですか? – Steve

+0

これは、フォームに値を渡す方法を尋ねる多くの質問と重複しているようです。多くの可能な解決策がありますが、その多くはデリゲートを使用するより簡単です。 – user34660

答えて

3

はい/第二の問題は、もう少し複雑ですが、それは、デリゲートを使用して解決することができているオプションなし

DialogResult dr = MessageBox.Show("Do you want to continue?", 
            "Your App Title", 
            MessageBoxButtons.YesNo, 
            MessageBoxIcon.Question, 
            MessageBoxDefaultButton.Button1); 

if(dr == DialogResult.No) 
    return; 

を表示するために必要なすべての機能が含まれているあなたの最初のポイントMessageBox.Showによって簡単に解決することができ

Form1クラスは、Form1クラスに何かを通知する必要があるたびに、テストクラスによって呼び出される代理人を渡すテストクラスを呼び出すとします。 Form1クラスで

あなたが最初の点に関してはFormクラス

public void MultipleStepsOperation(Action<string> formNotifier) 
    { 
     string status = "Initialize ops"; 
     if(formNotifier != null) 
     // Invoke is not required, just for clarity 
     // formNotifier(status); // the same as below... 
     formNotifier.Invoke(status); 
     .... 

     status = "Executing step 1"; 
     if(formNotifier != null) 
     formNotifier.Invoke(status); 

     status = "Executing step 2";  
     if(formNotifier != null) 
     formNotifier.Invoke(status); 
     .... 

    } 
関連する問題