1. 程式人生 > >C# 委託例項(跨窗體操作控制元件)

C# 委託例項(跨窗體操作控制元件)

今天研究了一下,在C#裡面卻是可以不用自定義訊息這麼複雜的方法來實現跨窗體呼叫控制元件,C#有更好的辦法就是委託。

效果描述:有兩個窗體,FORM1(一個名為“開啟form2”的button控制元件)和FORM2(一個名為“改變form1顏色“的button控制元件)。啟動時,FORM1中點選button控制元件“開啟form2””使FORM2顯示出來。點選FORM2中的“改變form1顏色”後,Form1中顏色改變。

一、在Form2裡面:
       首先宣告一個委託和委託例項
Form2類外

public delegate void ChangeFormColor(bool topmost);

Form2類裡

public event ChangeFormColor ChangeColor;

Form2的按鈕事件中呼叫委託

private void button1_Click(object sender, EventArgs e)
        {
            ChangeColor(true);//執行委託例項
        }


二、在Form1裡面:
button控制元件“開啟form2“的click事件中有下面的程式碼:

        {
            Form2 f = new Form2();
            f.ChangeColor += new ChangeFormColor(f_ChangeColor);
            f.Show();
        }

f.ChangeColor += new ChangeFormColor(f_ChangeColor);
這句最關鍵,你輸入到+=之後,按兩下Tab,他會自動給你生成回撥函式,如下:

void f_ChangeColor(bool topmost)
        {
            this.BackColor = Color.LightBlue;
            this.Text = "改變成功";
        }



 三、完整程式碼

using System;
using System.Drawing;
using System.Windows.Forms;

namespace 跨窗體呼叫控制元件
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.ChangeColor += new ChangeFormColor(f_ChangeColor);
            f.Show();
        }
        void f_ChangeColor(bool topmost)
        {
            this.BackColor = Color.LightBlue;
            this.Text = "改變成功";
        }
    }
}
using System;
using System.Windows.Forms;

namespace 跨窗體呼叫控制元件
{
    public delegate void ChangeFormColor(bool topmost);
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        public event ChangeFormColor ChangeColor;
        private void button1_Click(object sender, EventArgs e)
        {
            ChangeColor(true);//執行委託例項
        }
    }
}

最後再給大家介紹一種最簡單的C#跨窗體操作