繁体   English   中英

调用表单无法识别C#Windows表单用户控件

[英]C# Windows Form User Control Not Recognized by Calling Form

我正在用两个按钮编写一个简单的用户控件:保存和取消。 我认为它认为没有订阅者,因为它在我在代码中指示的位置始终为null。 请帮忙。

这是用户控件的代码:

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");
    }
}

您正在尝试在这里混合使用代表和事件。 如果只需要单击用户控件按钮时要在窗体中调用的方法,则在用户控件中声明事件并在窗体中注册回调函数。 我对您的代码进行了更改。 此代码将显示用户控件中单击按钮的对话框

   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!");
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM