2016-07-21 12 views
0

Ich führe ein Haupt-WinForm mit den meisten UI-Elementen, und dann wird ein Add-Formular aufgerufen, wenn die Schaltfläche Hinzufügen ausgewählt wird. Es sollte eine Eingabe erhalten und nach der Annahme an WinForm zurücksenden.Klassenübergreifende Kommunikation

läuft Dieser Code, wenn Sie auf die Schaltfläche „Hinzufügen“ auf der Hauptklasse:

public void addButton_Click(object sender, EventArgs e) 
    { 
     AddView newadd = new AddView(); 
     newadd.Show(); 
    } 

Dieser Code (auch in der Hauptklasse) auf eine Schaltfläche in der AddView Basis laufen soll:

public void AddDashObject(string dashName, string dashIdentifier, int dashFunction, string dashFunctionInfo, int dashVerbosity) 
    { 
     DashObject tmp = new DashObject("","",0,"",0); 
     tmp.DashName = dashName; 
     tmp.DashIdentifier = dashIdentifier; 
     tmp.DashFunction = dashFunction; 
     tmp.DashFunctionInfo = dashFunctionInfo; 
     tmp.DashVerbosity = dashVerbosity; 
     dashloaded.Add(tmp); 
     ReloadDashObjects(); 
    } 

Ich bin nicht wirklich sicher, wie man zwischen den Formen kommunizieren - ich kann einen Typ verwenden, der in der Hauptklasse erstellt wurde, und auch Methoden, aber ich bin mir ziemlich sicher, dass ich eine separate Instanz erstelle. Wie kann ich mit dem bestehenden kommunizieren?

MainView mnfrm = new MainView(); 
    MainView.DashObject tmp = new MainView.DashObject("","",0,"",1); // Defaults 

    private void button1_Click(object sender, EventArgs e) 
    { 
     mnfrm.dashloaded.Add(tmp); // Add the default DashObject to MainView's currently loaded DashObjects 
     mnfrm.ReloadDashObjects(); // Reload the list 
    } 

Nicht sicher, wie Sie weiter vorgehen - ein Ratschlag?

+1

Soll das Add-Formular modal sein, also ist das Hauptformular "gesperrt" während Benutzereingaben im Formular hinzufügen, oder sollen sie parallel funktionieren? –

+0

Senden Sie eine Referenz von MainForm an AddForm, und verwenden Sie die Referenz von MainForm dort. –

+0

@ MattiasÅslund - bemerkte gerade meine versehentliche Verwendung einer nicht-modalen Funktion. Es sollte modal sein (und verwendet ShowDialog) – Quartzic

Antwort

0

Da das Hinzufügen-Dialogfeld voraussichtlich modal ist, besteht die entkoppelte Möglichkeit darin, den Dialog nur mit einem OK-Status zu schließen. I.e. Das Formular ist nur ein Eingabesteuerelement, das eigentlich nichts "tut".

Dann wird das Hauptformular kann:

1) überprüfen, wie der Dialog direkt nach dem Showdialog() geschlossen wurde,

2) nennt einige GetResult() Funktion, um die Werte aus dem Add Form zu erhalten, bevor Entsorgung es.

3) Rufen Sie die Geschäftslogik auf, die die DashObjects tatsächlich erstellt und erneut lädt.