C#跨窗體調用控件(委托回調函數使用例子)


問題: 有兩個窗體,FORM1(含一個label控件,一個名為顯示form2的button控件)和FORM2(含一個button控件)。啟動時,FORM1中點擊button控件顯示form2使FORM2顯示出來。點擊FORM2中的button1后,Form1中的label1的text改變。 解決:用事件回調 一、在Form2

 

解決:用事件回調

 

一、在Form2里面:
       首先聲明一個委托和委托實例
       public delegate void SetMainFormTopMostHandle(bool topmost);
       public event SetMainFormTopMostHandle SetMainFormTopMost;

 

二、在Form1里面:
        button控件“顯示form2“的click事件中有下面的代碼:
        {
            Form2 f2 = new Form2 ();
            f2.Show()
        }
       然后在f2.Show()之前,加一句:
         f2.SetMainFormTopMost += new SetMainFormTopMostHandl(f2_SetMainFormTopMost);  用來給form1中的SetMainFormTopMost注冊一個修改label控件內容的方法f2_SetMainFormTopMost()

 

       提示:
         f2.SetMainFormTopMost += new SetMainFormTopMostHandle(f2_SetMainFormTopMost);
       這句最關鍵,你輸入到+=之后,按兩下Tab,他會自動給你生成回調函數

 

  
       如下:
      void f2_SetMainFormTopMost(bool topmost)
        {
            label1.Text = "調用成功";//改變label內容的代碼
        }
這里面f2_SetMainFormTopMost就是你用來修改label的方法(回調函數)。 SetMainFormTopMostHandle、SetMainFormTopMost分別是定義的委托和委托實例名稱,自己可以隨便定義。
大致就是為f2創建一個用來修改label的方法,然后把該方法綁定到這個委托實例上。

 

三、啟動f2,在f2中執行這個委托實例,就是SetMainFormTopMost(true)這樣寫 (參數要和委托的那個聲明一 致)
那么就會調用F1中綁定的那個方法。

 

源代碼如下:
Form1中的代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

 

namespace 跨窗體調用控件
{
   
     
    public partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();
        }

 

        private void Form1_Load(object sender, EventArgs e)
        {
          
        }

 

        void f2_SetMainFormTopMost(bool topmost) //回調函數
        {
            label1.Text = "調用成功";
        }

 

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.SetMainFormTopMost += new SetMainFormTopMostHandle(f2_SetMainFormTopMost);//給form2中的委托實例SetMainFormTopMost 注冊方法
            f2.Show();
        }
    }
}

 

Form2中的代碼:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

 

namespace 跨窗體調用控件
{
    public delegate void SetMainFormTopMostHandle(bool topmost); //定義委托
    public partial class Form2 : Form
    {
        public SetMainFormTopMostHandle SetMainFormTopMost;//定義委托實例
        public Form2()
        {
            InitializeComponent();
        }

 

        private void button1_Click(object sender, EventArgs e)
        {
            SetMainFormTopMost(true);//執行委托實例
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM