C#winform窗體用戶控件自定義事件


C#許多事情都和事件有關系,大部分的事情我們可以通過C#自己的事件來完成,但如果我們自己新建了一個自定義控件,我們該如何定義自己想要的事件呢?下面我就來為大家粗略的講解一番。

假設我們自定義了一個控件,它的類名是MyControl,我們在test類(test也是一個窗體)中使用它,我們要在test中寫方法,在MyControl中寫事件,這該怎么做?如何在test中捕獲Mycontrol中的事件,如何讓事件綁定test中的方法?
假設MyControl是一個組合控件,假設有一個按鈕btn_Ok,它在組合控件System.Windows.Forms. ToolStrip ​中,假設這個容器叫toolstrip,當我們點擊了之后需要響應一個事件,提示我們數據保存了,這個事件我們起個名字叫Btn_Ok_Clicked(當然也可以叫datasaved或者其它),下面要定義這個事件,我們這么定義:
 
private static readonly object Event_Btn_Ok_Clicked = new object();
 
        public event EventHandler Btn_Ok_Clicked
        {
            add { base.Events.AddHandler(Event_Btn_Ok_Clicked , value); }
            remove { base.Events.RemoveHandler(Event_Btn_Ok_Clicked , value); }
        }
然后我們需要定義一個方法,用來引發這個事件
 
protected virtual void OnBtn_OK_Click(EventArgs e)
        {
            EventHandler handler =
                base.Events[Event_Btn_Ok_Clicked ] as EventHandler;
            if (handler != null)
            {
                handler(this, e);
            }
        }
 
該方法定義完了之后,我們需要通過捕獲原本的事件,然后引發該事件
點擊btn_Ok會引發toolstrip的click事件,我們在捕獲click事件后對數據進行處理
        
        private void ToolStripItemClicked(
            object sender, ToolStripItemClickedEventArgs e)
        {
            switch (e.ClickedItem.Name)
            {
                case "btn_Ok":
                    OnBtn_OK_Click(e);
                    break;
    }
  }
以上方法定義在MyControl類中
 
 
到這里,MyControls中的事件和方法就都定義和實現完了,下面我們來講在test中如何對這個事件的引用。
 
以下代碼都在test類中
我們通過拖控件或者代碼的方式在test窗體中添加控件
        private MyControl control;
在窗體初始化的時候為剛才我們自定義的事件添加方法,方法名是functiontest
        control. Btn_Ok_Clicked += new EventHandler(functiontest);
現在我們來定義functiontest方法,假設我們就是為了提示“數據已保存”
        private void functiontest(object sender, EventArgs e)
        {
                MessageBox.Show("數據已保存");
        }
 
到這里,我們從 自定義控件 -> 自定義事件 -> 觸發事件 -> 綁定方法  的步驟已經全部完成了。有不明白的請通過回復的方式提問,對講的不好的,也歡迎指出~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM