為C 自定義控制項新增自定義事件

2022-03-23 17:48:29 字數 4737 閱讀 7046

大氣象 原文 為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:

使用者控制項的實現比較簡單,直接從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顯示當前的文字框內容。

窗體中新增上面的使用者控制項,當我們改變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)

if(usercontrolvaluechanged != null)

usercontrolvaluechanged(this,new textchangeeventargs(this.textbox1.text));

好了,為了便於在csdn上回答問題,把完整的**貼了出來:

using

system;

using

system.collections;

using

system.componentmodel;

using

system.drawing;

using

system.data;

using

system.windows.forms;

namespace

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;

namespace

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 ( )

為C 自定義控制項新增自定義事件

大氣象 原文 為c 自定義控制項新增自定義事件 這裡的自定義控制項是由普通控制項組合而成的。希望事件響應 推遲到使用自定義控制項的窗體裡寫。步驟一 新建乙個使用者控制項,放兩個按鈕,tag分別是btn1,btn2.這兩個按鈕的共用單擊事件處理 如下 using system using system...

為C 自定義控制項新增自定義事件

大氣象 原文 為c 自定義控制項新增自定義事件 這裡的自定義控制項是由普通控制項組合而成的。希望事件響應 推遲到使用自定義控制項的窗體裡寫。步驟一 新建乙個使用者控制項,放兩個按鈕,tag分別是btn1,btn2.這兩個按鈕的共用單擊事件處理 如下 using system using system...

為C 自定義控制項新增自定義事件

大氣象 原文 為c 自定義控制項新增自定義事件 這裡的自定義控制項是由普通控制項組合而成的。希望事件響應 推遲到使用自定義控制項的窗體裡寫。步驟一 新建乙個使用者控制項,放兩個按鈕,tag分別是btn1,btn2.這兩個按鈕的共用單擊事件處理 如下 using system using system...