2016-07-13 3 views
0

두 개의 단추로 저장 및 취소 할 수있는 간단한 사용자 정의 컨트롤을 작성하고 있습니다. 나는 그것이 코드에 명시된 곳에서 항상 null이기 때문에 구독자가 없다고 생각한다. 도와주세요.C# Windows Form 사용자 정의 컨트롤이 호출 양식으로 인식되지 않음

다음
public partial class SaveCancelButtons : UserControl 
{ 
    public delegate void SaveClickedHandler(); 
    public delegate void CancelClickedHandler(); 

    public SaveCancelButtons() 
    { 
     InitializeComponent(); 
    } 
    public event SaveClickedHandler SaveClicked; 
    public event CancelClickedHandler CancelClicked; 

    protected virtual void OnSaveClicked() 
    { 
     if (SaveClicked != null)   <<<<----- ALWAYS NULL 
     { 
      SaveClicked(); // Notify Subscribers 
     } 
    } 
    protected virtual void OnCancelClicked() 
    { 
     if (CancelClicked != null)  <<<<----- ALWAYS NULL 
     { 
      CancelClicked(); // Notify Subscribers 
     } 
    } 
    private void btnSave_Click(object sender, System.EventArgs e) 
    { 
     OnSaveClicked(); 

    } 
    public void btnCancel_Click(object sender, EventArgs e) 
    { 
     OnCancelClicked(); 
    } 

    } 

내가 그것을 호출 오전 방법은 다음과 같습니다 : 당신은 여기 대표 및 이벤트를 혼합하려고

public partial class TestForm : Form 
{ 
    public TestForm() 
    { 
     // declare and subscribe to the user control 
     SaveCancelButtons scb = new SaveCancelButtons(); 
     scb.SaveClicked += UC_SaveClicked; 
     scb.CancelClicked += UC_CancelClicked; 
     this.Controls.Add(scb); 

     InitializeComponent(); 
    } 

    private void UC_SaveClicked() 
    { 
     MessageBox.Show("Save!"); 
    } 
    private void UC_CancelClicked() 
    { 
     MessageBox.Show("Cancel"); 
    } 
} 
+0

을 변경, 나는 그것이 뭔가 빠진 것 같아요. 이 작은 자습서를 확인해보십시오. 도움이되는지 확인하십시오. EventHandler에서 호출을 랩핑합니다. 아마도 시도해보십시오. http://csharp-station.com/Tutorial/CSharp/Lesson14 – Nikki9696

+0

그 링크를 가져 주셔서 감사합니다! – Missy

답변

1

여기

는 사용자 제어를위한 코드입니다. 원하는 경우 사용자 정의 컨트롤 단추를 클릭 할 때 호출 할 폼의 메서드가 있으면 사용자 정의 컨트롤에서 이벤트를 선언하고 폼에 콜백 함수를 등록하십시오. 귀하의 코드를 변경했습니다. 이 코드는 사용자 정의 컨트롤에 클릭 버튼에 대화가 표시됩니다

public partial class SaveCancelButtons : UserControl 
    { 
     public delegate void SaveClickedHandler(); 
      public delegate void CancelClickedHandler(); 
     public SaveCancelButtons() 
     { 
      InitializeComponent(); 

     } 

     public event EventHandler SaveClicked; 
     public event EventHandler CancelClicked; 

     protected virtual void OnSaveClicked() 
     { 
      EventHandler handler = SaveClicked; 
      if (SaveClicked != null)   // 
      { 
       handler(this,new EventArgs()); // Notify Subscribers 
      } 
     } 
     protected virtual void OnCancelClicked() 
     { 
      EventHandler handler = CancelClicked; 
      if (CancelClicked != null)  // <<<< 
      { 
       handler(this,new EventArgs()); // Notify Subscribers 
      } 
     } 

     private void btnSave_Click(object sender, EventArgs e) 
     { 
      OnSaveClicked(); 
     } 

     private void btnCancel_Click(object sender, EventArgs e) 
     { 
      OnCancelClicked(); 
     } 
    } 

양식은 흠

public partial class TestForm : Form 
{ 
    public TestForm() 
    { 
      // declare and subscribe to the user control 
      SaveCancelButtons scb = new SaveCancelButtons(); 
      scb.SaveClicked += Scb_SaveClicked; ; 
      scb.CancelClicked += Scb_CancelClicked; ; 
      this.Controls.Add(scb); 

      InitializeComponent(); 
    } 

     private void Scb_CancelClicked(object sender, EventArgs e) 
     { 
      MessageBox.Show("Cancel"); 
     } 

     private void Scb_SaveClicked(object sender, EventArgs e) 
     { 
      MessageBox.Show("Save!"); 
     } 
} 
+0

정말 고마워요. 내가 잘못하고있는 곳을 보니 당신의 도움에 감사드립니다. – Missy