簡體   English   中英

Windows窗體-使用公共​​事件將窗體訂閱到用戶控件事件

[英]Windows Forms - using public event to subscribe Form to a user control event

在處理事件和/或委托時遇到問題。 我看到了非常類似的問題,但實際的實現方式仍然不清楚。 因此,請在回答時提供更具體的信息,這樣我可以嘗試並最終通過我知道的代碼來了解創建/處理公共/自定義事件的工作方式。

我所擁有的是一個User Control ,它只是一個文本框和一個按鈕,我需要使用文本框中的值來更改數據庫中的記錄。 我將這種控件用於多種形式,因此我需要確切地知道我正在使用哪個實體並能夠調用它自己的save方法。 如果我可以使用User Control按鈕的click事件,然后調用當前表單的Save()方法,則所有操作將變得更加容易。

這是我的用戶控件:

namespace UserControls.CommonControls
{
    public delegate void ClickMe(string message);

    public partial class ChangeCode : UserControl
    {
        public event ClickMe CustomControlClickMe;
        public ChangeCode()
        {
            InitializeComponent();
        }

        private void btnChange_Click(object sender, EventArgs e)
        {
            if (CustomControlClickMe != null)
                CustomControlClickMe("Hello");
           //ToDo fill
            //MessageBox.Show("To Do: Write the busieness logic.");
        }

        public void SetTextBoxMask(MaskedTextBox txtBox)
        {
            txtChange.Mask = txtBox.Mask;
        }
    }
}

我將其發布為最后一次嘗試,以實現我所需的東西。

這是需要使用User ControlClick事件的一種形式,更具體地說是Constructor因為如果我理解正確的話,那是我必須訂閱該事件的地方:

public MaterialEdit()
        {
            InitializeComponent();
            UserControls.CommonControls.ChangeCode. += new ClickMe(button2_Click);
        }

UserControls.CommonControls.ChangeCode這是我到達User Control它名為ChangeCode

從粘貼的內容來看,尚不清楚您是否將ChangeCode控件添加到了表單中。 要使用控件及其事件和屬性,首先必須為其創建新實例並將其添加到表單中。 這個完成了:

  • 在設計器中,通過將控件從“工具箱”拖動到窗體
  • 在代碼編輯器中,通過調用控件構造函數並將新對象添加到控件集合中

只有這樣,您才能處理該對象的事件。 假設您將ChangeCode控件拖放到窗體上,並且Visual Studio將其命名為ChangeCode1 您將這樣的處理附加到CustomControlClickMe事件:

ChangeCode1.CustomControlClickMe += new ClickMe(button2_Click);

您粘貼的代碼( UserControls.CommonControls.ChangeCode. += new ClickMe(button2_Click); )由於以下原因不正確:

  1. 語法上,左側表達式以結尾. 這使其成為不正確的分配目標( UserControls.CommonControls.ChangeCode.
  2. 不提供事件名稱,僅提供控件名稱(您需要在分配的左手端添加要分配給-的.CustomControlClickMe
  3. 您正在嘗試將處理程序附加到類而不是對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM