2017-11-29 4 views
1

Ich erstellen Windows-Formularanwendung und das Hauptformular enthält ein Panel. Verschiedene Benutzersteuerelemente werden in diesem Bereich beim Klicken auf die Schaltfläche geladen.So rufen Sie eine Klassenmethode aus einer anderen Klasse

namespace LearnCSharp 
{ 
    public partial class MainForm : Form 
    { 
     private void configButton_Click(object sender, EventArgs e) 
     { 

      var uControllerDashboard = new Controllers.Dashboard();  
      panel.Controls.Add(uControllerDashboard); 
      updateNotification("active");   

     } 

     private void updateNotification(string state) 
     { 
      switch (state) 
      { 
       case "active" : 
       //Do something here 
       break; 

      } 
     } 

    } 
} 

wenn klicken Config-Taste es Dashboardbenutzer Controller in Feld lädt gibt es eine andere Anwendung Schaltfläche in Dashboard-Usercontrol. Wenn ich auf diese Schaltfläche klicke, muss ich updatNotification Methode in MainForm Klasse anrufen.

namespace LearnCSharp.Controllers 
{ 
    public partial class Dashboard : UserControl 
    { 
     private void btnApply_Click(object sender, EventArgs e) 
     { 
      // Need to call updateNotification method here. 
     } 
    } 
} 

Wie kann ich meine Anforderung erreichen. Ich schätze jede Hilfe. Vielen Dank.

+3

Zuerst müssen Sie die Methode public markieren, dann eine Instanz von MainForm erstellen und schließlich MainForm.updateNotification() – apomene

+0

@apomene +1 aufrufen, aber könnten Sie 'MainForm.updateNotification' in etwas wie' instance.updateNotification' ändern? Weil es im Moment fast wie ein statischer Anruf aussieht. –

+0

Die Antwort von @ apomene, obwohl technisch verfügbar, sollte nur unter extremen Bedingungen verwendet werden. Verwenden Sie stattdessen die unten stehende Ereignisantwort, da Ihr Steuerelement wahrscheinlich nicht wissen wird, zu welcher Instanz es gehört. – netniV

Antwort

2

Verwenden Sie Ereignisse für das.

Anstatt das MainForm im UserControl aufzurufen, erstellen Sie ein Ereignis im UserControl und lassen das MainForm dieses Ereignis abonnieren. Innerhalb des Benutzersteuerelements müssen Sie nur das Ereignis auslösen.

Es gibt viele Beispiele im Internet darüber. Werfen Sie einen Blick auf diese:

Hoffnung, das hilft.

Verwandte Themen