1. 程式人生 > >winform 自定義控件的使用

winform 自定義控件的使用

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 自定義控件的使用