2017-06-23 7 views
0

私は今この問題に関するいくつかの解決策がありますが、私はそれらで私の問題を解決できません。 私は2つのユーザーコントロールを持っています:usercontrols間でデータを渡すC#

最初のものはレポートオブジェクトを作成し、もう1つはそれを示します。私は2つのコントロールを持っているプリンシパルフォームを持っています。

この2つのコントロールがそのようにDLLにalredy作成され、私はこのような主要なフォームに追加します:

//ADDS THE FIRST CONTROL TO THE PANEL CONTROL 

     myDll.controlUserReport userControlA = new myDll.controlUserReport(); 
     panelControl1.Controls.Add(userControlA); 
     userControlA.Dock = DockStyle.Left; 

//ADDS THE SECOND CONTROL TO THE PANEL CONTROL 

     myDll.controlDocViewer userControlB = new myDll.controlDocViewer(); 
     panelControl1.Controls.Add(userControlB); 
     userControlB.Dock = DockStyle.Fill; 

がどのように私は最初の制御controlUserReportで作成されたレポートオブジェクトを渡すことができたときにIボタンをクリックすると、他のユーザーコントロールcontrolDocViewerに表示されますか?

enter image description here

+2

おそらく、レポートオブジェクトを含むあなたの 'controlUserReport'でパブリックプロパティを作成します最良の方法、およびUserControlAでイベントを宣言それを得るために 'controlDocViewer'の別のもの – Pikoh

+0

あなたはユーザーコントロールのコードを変更しますか? –

+0

はい私は@MongZhuすることができます – dbz

答えて

2

あなたはこのためにイベントを使用する必要があります。

UserControlB
//Declare EventHandler outside of class 
public delegate void MyEventHandler(object source, Report r); 

public class UserControlA 
{ 
    public event MyEventHandler OnShowReport; 

    private void btnShowReport_Click(object sender, Report r) 
    { 
     OnShowReport?.Invoke(this, this.Report); 
    } 
} 

がイベントをサブスクライブしてレポートを表示:

public class UserControlB 
{ 
    // Do it in Form_Load or so ... 
    private void init() 
    { 
     userControlA.OnShowReport += userControlA_OnShowReport; 
    } 

    private void userControlA_OnShowReport(object sender, Report r) 
    { 
     // Show the report 
     this.ShowReport(r); 
    } 
} 
関連する問題