** :
為c#自定義控制項新增自定義事件
這裡的自定義控制項是由普通控制項組合而成的。
希望事件響應**推遲到使用自定義控制項的窗體裡寫。
步驟一:新建乙個使用者控制項,放兩個按鈕,tag分別是btn1,btn2.
這兩個按鈕的共用單擊事件處理**如下:
複製**
using system;
using system.collections.generic;
using system.componentmodel;
using system.drawing;
using system.data;
using system.linq;
using system.text;
using system.windows.forms;
namespace ucdll
//定義委託
public
delegate
void
btnclickhandle(object sender, eventargs e);
//定義事件
public
event btnclickhandle usercontrolbtnclicked;
private
void
btn_click(object sender, eventargs e)
}}
複製**
步驟二:當使用者拖乙個自定義控制項在窗體的時候,
在事件裡可以找到usercontrolbtnclicked事件。
private
void
uctest1_usercontrolbtnclicked(object sender, eventargs e)
這個操作很有用。
url:
c# 自定義控制項如何在屬性欄新增自定義事件?可以雙擊生成+=**?
使用者控制項的實現比較簡單,直接從system.windows.forms.usercontrol繼承。
public class usercontrol1 : system.windows.forms.usercontrol
為了便於測試我在上面新增了乙個textbox,並註冊textbox的textchanged事件,
this.textbox1.textchanged += new system.eventhandler(this.textbox1_textchanged);
事件處理函式,
private void textbox1_textchanged(object sender, system.eventargs e)
messagebox.show(this.textbox1.text);
這裡演示如果控制項中文字框的內容改變就會用messagebox顯示當前的文字框內容。
窗體中新增上面的使用者控制項,當我們改變textbox的文字時,可以看到跳出乙個對話方塊,很簡單吧。
下面來看看對控制項新增屬性。
這裡定義乙個私有變數。
private string customvalue;
新增訪問他的屬性
public string customvalue
set
} 在窗體中使用的時候像普通控制項一樣進行訪問,
usercontrol11.customvalue = 「使用者控制項自定義資料」;
通過事件可以傳遞訊息到窗體上,在定義之前我們先來寫乙個簡單的引數類。
public class textchangeeventargs : eventargs
public string message }
} 定義委託為,
public delegate void textboxchangedhandle(object sender,textchangeeventargs e);
接下去在使用者控制項中新增事件,
//定義事件
public event textboxchangedhandle usercontrolvaluechanged;
為了激發使用者控制項的新增事件,修改了一下**,
private void textbox1_textchanged(object sender, system.eventargs e)
好了,為了便於在csdn上回答問題,把完整的**貼了出來:
using system;
using system.collections;
using system.componentmodel;
using system.drawing;
using system.data;
using system.windows.forms;
private system.componentmodel.container components = null;
public string customvalue
set}
//定義事件
public event textboxchangedhandle usercontrolvaluechanged;
public usercontrol1()
protected override void dispose( bool disposing )
}base.dispose( disposing );
}#region元件設計器生成的**
private void initializecomponent()
#endregion
private void textbox1_textchanged(object sender, system.eventargs e)
}//定義委託
public delegate void textboxchangedhandle(object sender,textchangeeventargs e);
public class textchangeeventargs : eventargs
public string message
}}
}
使用時要在窗體中註冊上面的事件,比較簡單都貼源**了,
using system;
using system.drawing;
using system.collections;
using system.componentmodel;
using system.windows.forms;
using system.data;
public form1()
protected override void dispose( bool disposing )
}base.dispose( disposing );
}#region windows 窗體設計器生成的**
private void initializecomponent()
#endregion
[stathread]
static void main()
private void usercontrol11_usercontrolvaluechanged(object sender, textchangeeventargs e)
}
}
另外需要動態載入,就把控制項新增在容器的controls集合就行了,下面是在建構函式中新增控制項,
public form1()
另外從vs.net中的工具箱中拖動使用者控制項到窗體上,如果是第一次需要編譯一下專案。
//如果我有乙個寫好的控制項,想在form中使用如何???????
在控制項中:
public delegate void onsubbureauselectchanged();//定義委託
public event onsubbureauselectchanged onsubbureauselectchanged;//定義事件
//以下**放在你要用在窗體中呼叫的事件中,可以是控制項中有的也可以自己寫的
if ( ( subbureaus.count > 0 ) && ( onsubbureauselectchanged != null ) )
onsubbureauselectchanged ();
//以下寫在窗體構造中
searchpanel.onsubbureauselectchanged += new searchpanel.onsubbureauselectchanged ( onsubbureauselectchanged );
//以下再寫乙個自己寫的事件
private void onsubbureauselectchanged ( )
歡迎使用CSDN markdow
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...
歡迎毛毛與妞妞使用CSDN markdown編輯器
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...
歡迎使用CSDN markdow1n編輯器
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...