大氣象 原文 為c#自定義控制項新增自定義事件
這裡的自定義控制項是由普通控制項組合而成的。
希望事件響應**推遲到使用自定義控制項的窗體裡寫。
步驟一:新建乙個使用者控制項,放兩個按鈕,tag分別是btn1,btn2.
這兩個按鈕的共用單擊事件處理**如下:
usingsystem;
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事件。
privatevoid 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);
事件處理函式,
privatevoid textbox1_textchanged(object
sender, system.eventargs e)
這裡演示如果控制項中文字框的內容改變就會用messagebox顯示當前的文字框內容。
窗體中新增上面的使用者控制項,當我們改變textbox的文字時,可以看到跳出乙個對話方塊,很簡單吧。
下面來看看對控制項新增屬性。
這裡定義乙個私有變數。
private string customvalue;
新增訪問他的屬性
publicstring
customvalue
set}
在窗體中使用的時候像普通控制項一樣進行訪問,
usercontrol11.customvalue = "使用者控制項自定義資料";
通過事件可以傳遞訊息到窗體上,在定義之前我們先來寫乙個簡單的引數類。
publicclass
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上回答問題,把完整的**貼了出來:
usingsystem;
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}}
}
使用時要在窗體中註冊上面的事件,比較簡單都貼源**了,
usingsystem;
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集合就行了,下面是在建構函式中新增控制項,
publicform1()
另外從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...