C# delegate 學習 (練這麼久終於悟出來點東東了,繼續加油! ^_^)

前言this

  從事開發工做兩年有餘了,但仍是對Delegate,Event神馬的看見就頭疼,文章看過無數,本身也練習過好多遍,但到用的時候或者人家換了一種形式以後就又不懂了,哎~智商捉急啊!!spa

可是,這兩天的收穫仍是不錯的~!因此筒子們必定要有信心+幾分堅持,回頭一看,原來是這麼簡單。code

正文orm

  下面是我練習時作的一個小例子,在這記錄下來,一是提醒本身,二來也許還能幫助到別人。:Pblog

  跟着個人思路走,你會發現 so easy.事件

1、祝福傳遞功能開發

  流程如圖:get

  

  一、第一步很簡單,就很少說了。可是注意要設置frm3.MdiParent = this;博客

            Form3 frm3 = new Form3();
            frm3.MdiParent = this;
            frm3.Show();

 

  二、來看第二步,首先要明確咱們的目的是什麼?string

    1)修改Form3中的ListBox1中的值;

    2)改變背景色爲Green。

    那麼兩件事,咱們就須要兩個方法來完成(這裏有人會想:笨,這麼簡單的需求放到一個方法不就好了麼?由於真正的項目需求是不會這麼簡單的,呵呵)。

    這兩件事都是針對Form3的,因此咱們把這兩個方法加到Form3裏面。

        //更新文字方法
        public void SetText(string text)
        {
            this.listBox1.Items.Add(text);
        }
        //更新背景顏色方法
        public void SetColor(Color color)
        {
            this.BackColor = color;
        }

    OK,方法加進去以後,咱們繼續走,單擊Open,打開模式窗體frmContent。

            frmContent content = new frmContent();
            content.ShowDialog();

    三、在下拉框選擇完對應的的類型以後,點擊添加進行傳值+修改顏色,只需簡單幾步,而後就大功告成了!哈哈

      1)聲明委託。(跟方法的聲明同樣,只不過多加一個delegate,還有不須要方法體)

        public delegate void GetTextHandle(string text);    //申明委託
        public delegate void GetColorHandle(Color color);    //申明委託    

      2)實例化。(緊接着,下一步就進行實例化,仍是同樣,方法怎麼實例化,委託就怎麼實例化,這裏給一個null值)

        public GetTextHandle getTextHandle = null;
        public GetColorHandle getColorHandle = null;

      3)使用。(使用前要作非空判斷,而後將textBox1中的值傳遞過去就哦了)

        private void button1_Click(object sender, EventArgs e)
        {
            if (getTextHandle != null)
            {
                getTextHandle(this.textBox1.Text);
            }
            if (getColorHandle != null)
            {
                getColorHandle(Color.Green);
            }
        }

    好了,是否是火燒眉毛想感覺下成果,運行試試看,咦?爲毛點了添加沒反應??

    跟蹤代碼發現 getTextHandle 爲空!這是爲何呢?

    仔細觀察一下,發現第二步和第三步在委託這塊基本沒半毛錢關係,難怪會點了沒反應。

    因此咱們須要在第二步加入一行代碼:

            frmContent content = new frmContent();
            content.getTextHandle = SetText;
       content.getColorHandle = SetColor; content.ShowDialog();

    這段話的意思就是將SetText和SetColor方法當參數傳遞給frmContent的getTextHandle和getColorHandle

    OK,如今應該是沒什麼問題了。

    爲了進一步加深理解,咱們還要增長一個功能,沒錯,在frmContent界面的類型後面還有一個添加按鈕,那麼這個按鈕的功能是什麼呢?

2、動態添加祝福類型

    一、跟上面同樣,仍是先搞清楚需求,這裏很簡單,咱們須要給frmContent窗體的祝福類型下面加Item

     那麼先寫方法吧。

 

        public void AddCbo(string text) 
        {
            this.comboBox1.Items.Add(text);
        }

 

    二、添加事件

        private void button2_Click(object sender, EventArgs e)
        {
            Form4 frm4 = new Form4();
            frm4.setValue = AddCbo; //注意這裏
            frm4.ShowDialog();
        }

    三、Form4窗體代碼

        public delegate void SetValue(string text);
        public SetValue setValue = null;

        private void button1_Click(object sender, EventArgs e)
        {
            if (setValue!=null)
            {
                setValue(textBox1.Text);
            }
        }

    OK,至此,委託就完了,固然這些只是皮毛,後續我會慢慢補充完整!

    歡迎你們來個人博客參觀:http://www.cnblogs.com/xw-yanger/

    demo下載地址:Demo

相關文章
相關標籤/搜索