winform 自定義控件的使用
阿新 • • 發佈:2017-07-18
names git ems github nsf 回調 .cn 自定義 父窗體
c#的自定義控件還是很方便的,至少相對於c++而言。
1,當然是建立一個windows 窗體空間庫,我這裏就是用vs 2015 ,工程名MyControl
第二步。在自定義空間窗體內,拖放這樣一組空間。我們發送編輯框的內容給父窗體,然後接受父窗體的發送的內容,顯示到listbox 中。
這裏會看到我使用了委托和事件,其實,剛入門的我,對於c#裏的委托和事件 理解的並不深刻。看到很多地方再用。感覺和c++ 的回調很相似。這裏就不糾結了,
後面慢慢理解吧。我們通過委托將子窗體的內容發送到主窗體。
namespace MyControl { public partial class UserControl1: UserControl { //聲明委托 和 事件 public delegate void TransfDelegate(String value); public UserControl1() { InitializeComponent(); } public event TransfDelegate TransfEvent; private void UserControl1_Load(object sender, EventArgs e) { } public void WriteMessage(string str) { listBoxRecv.Items.Add(str); } private void buttonSend_Click(object sender, EventArgs e) { TransfEvent(textBoxSend.Text); } } }
第三步,直接編譯生成,這樣在debug 目錄下就會生成一個 MyControl.dll 這樣一個文件,讓我這樣一個從c++ 過來的人,真的是汗顏啊。也太簡單了吧。
第四部,也就是如何使用該自定義控件。在工具箱的最下面,右鍵選擇“選擇項”,進入到COM 選項下,瀏覽剛剛生成的MyControl.dll 也就是將該控件加
入到我們的工具箱中。這樣我們就可以像其他控件一樣,拖放該控件到我們主窗體中。
在主窗體中,我們也拖放一個類似的布局。這裏需要註意的一點是我們要實現 子控件的時間,才能達到子控件給主窗體復制的效果。
namespace UserControl { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { userControl11.WriteMessage(textBoxSend.Text); } //事件處理方法 void frm_TransfEvent(string value) { listBoxRecv.Items.Add(value); } private void Form1_Load(object sender, EventArgs e) { userControl11.TransfEvent += frm_TransfEvent; } } }
比如說,我們想要主窗體獲取到子窗體的點擊事件怎麽做,也很簡單,類似的,我們可以自定義點擊事件,讓主窗體實現它既可。
項目中用到的一個波形控件,已經上傳到github https://github.com/liningg/wavecontrol.git
winform 自定義控件的使用