2017-11-29 3 views
1

私はWindowsフォームアプリケーションを作成しています。そのメインフォームにはパネルが含まれています。ボタンをクリックすると、そのパネルに異なるユーザーコントロールがロードされます。別のクラスからクラスメソッドを呼び出す方法

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; 

      } 
     } 

    } 
} 

パネルにそれがダッシュボードユーザーのコントローラをロード設定ボタンをクリックしたときに別のがあるがダッシュボードのUserControlにボタンを適用します。そのボタンをクリックすると、updatNotificationメソッドがメインフォームクラスに呼び出されます。

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

どのように私の要件を達成することができます。私はどんな助けにも感謝します。ありがとう。

+3

最初にメソッドをpublicにしてからMainFormのインスタンスを作成し、最後にMainForm.updateNotification()を – apomene

+0

@apomene +1と呼びますが、 'MainForm.updateNotification'を' instance.updateNotification'のように変更してください。今は静的呼び出しのように見えます。 –

+0

@ apomeneの回答は技術的に入手可能ですが、極端な状況を除いては使用しないでください。代わりに、あなたのコントロールはそれが関連付けられているインスタンスを知っていない可能性があるので、代わりに以下のイベント回答を使用してください。 – netniV

答えて

2

イベントを使用します。

UserControl内でMainFormを呼び出す代わりに、UserControlでイベントを作成し、MainFormにそのイベントをサブスクライブさせます。 UserControlの内部では、イベントをトリガーするだけです。

ウェブにはこれに関する多くの例があります。ただ、これを見て取る:

すると、この情報がお役に立てば幸いです。

関連する問題