2016-04-10 6 views
-1

Ich bin neu in C# und es tut mir leid, dass ich nach einer sehr einfachen Frage gefragt habe.Zeige einen Dialog, der den Benutzer auffordert fortzufahren oder abzubrechen

Ich habe 2 Klassen, Form1.cs und Testing.cs

  1. ich eine Funktion in Testing.cs schreiben und es viele Verarbeitungsschritte hat. Ich möchte bei jedem Schritt bestätigen, dass der Benutzer den nächsten Schritt weiter bearbeiten will. Wenn sie das nicht möchten, klicken sie auf Abbrechen, um die Verarbeitung zu stoppen. Wie kann ich das tun, weil ich DialogResult in Klasse Testing nicht aufrufen kann, um einen Dialog anzuzeigen.

  2. In der Klasse Testing, nach jedem verarbeiteten Schritt habe ich einen Stachel aktualisiert seinen Status. Ich weiß nicht, wie ich diese Zeichenfolge sofort an das Formular senden soll, um den Status in einer Textbox anzuzeigen.

Ich schätze Ihre Hilfe sehr.

+3

Zum ersten Punkt überschritten erhalten, was das Problem MessageBox.Show mit Aufruf ist? – Steve

+0

Dies scheint ein Duplikat vieler Fragen zu sein, die fragen, wie ein Wert an ein Formular übergeben wird. Es gibt sehr viele mögliche Lösungen, viele sind einfacher als die Verwendung eines Delegaten. – user34660

Antwort

3

Ihr erster Punkt leicht durch MessageBox.Show werden konnte gelöst, die alle notwendigen Funktionen enthält eine Ja/Nein-Option

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

if(dr == DialogResult.No) 
    return; 

Das zweite Problem zu zeigen, ein wenig komplexer, aber es gelöst werden könnte Delegierten mit

Angenommen, Ihre Form1-Klasse ruft die Testklasse über einen Delegaten auf, der von der Testklasse jedes Mal aufgerufen werden sollte, wenn die Form1-Klasse über etwas informiert werden muss.

In Form1 Klasse schreiben Sie

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

in Testklasse Sie die Delegaten von der Form-Klasse

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); 
     .... 

    } 
Verwandte Themen