1. 程式人生 > >c# 用委託和事件實現不同窗體間的通訊(一)

c# 用委託和事件實現不同窗體間的通訊(一)

 C# 中的“事件”是當物件滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的物件不必知道需要通知誰,一旦滿足了某個條件,將自動呼叫該事件,正確通知每個需要通知的物件。通過使用事件,提高了程式的模組化程度。

   例子:通過form1開啟form2,改變form2上combox1控制元件選擇的值,然後將 combox1的text值返回到form1中的TextBox1的text上

 在Form2中

    public partial class Form2 : Form

{

public delegate void GetSelectionData(object

sender, SelectionChangedEventArgs e);

public event GetSelectionData getData;//宣告事件

public Form2()

{

InitializeComponent();

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

if (getData != null)

{

SelectionChangedEventArgs E = new SelectionChangedEventArgs(comboBox1.Text);

getData(this

,E);

}

}

}

//由於本示例程式需在事件中傳遞資料,因此定義了EventArgs的派生類SelectionChangedEventArgs

public class SelectionChangedEventArgs : EventArgs

{

private string m_selection;

//本屬性用於傳遞事件資料

public string Selection

{

get { return m_selection; }

}

//委託型別定義傳遞給處理該事件的方法的一組引數。多個事件可共享相同的委託型別,因此僅當尚未宣告任何合適的委託型別時才需要執行該步驟。

public SelectionChangedEventArgs(string

selection)

{

m_selection = selection;

}

}

在Form1中:

        private void button2_Click(object sender, EventArgs e)

{

//為了開始接收事件呼叫,客戶程式碼先建立事件型別的委託,該委託引用應從事件呼叫的方法。然後它使用+= 將該委託寫到事件可能連線到的其他任何委託上

m_frm2 = new Form2();

m_frm2.getData += new Form2.GetSelectionData(m_frm2_SelectionChanged); //與事件掛鉤

m_frm2.ShowDialog();

}

private void m_frm2_SelectionChanged(object sender,SelectionChangedEventArgs e)

{

//獲取事件傳遞過來的資料

textBox1.Text =e.Selection;

}

相關推薦

c# 委託事件實現不同窗體通訊()

 C# 中的“事件”是當物件滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的物件不必知道需要通知誰,一旦滿足了某個條件,將自動呼叫該事件,正確通知每個需要通知的物件。通過使用事件,提高了程式的模組化程度。    例子:通過form1開啟f

C#使用委託事件實現釋出訂閱者模式

事件是C#中的高階概念,和js中的滑鼠點選$("tag").click,懸停$("tag").hover或css元素樣式的改變(onChanged)等事件,當事件觸發才執行我們所委託的方法。 步驟: 1、建立一個委託; 2、將建立的委託與特定事件關聯; 3、編寫C#事件處理程式; 4、利用編

C#裡的委託事件實現Observer(觀察者)

  一、委託的簡介 1、委託的宣告: delegate  HandlerName ([parameters])  例如: public delegate void PrintHandler(string

C#的委託事件

委託 委託相當於C++的函式指標或者函式的引用。 using System; public class FunClass { public void func1() { Console.WriteLine ("func 1"); }

C#中委託事件的區別

大致來說,委託是一個類,該類內部維護著一個欄位,指向一個方法。事件可以被看作一個委託型別的變數,通過事件註冊、取消多個委託或方法。本篇分別通過委託和事件執行多個方法,從中體會兩者的區別。   □ 通過委託執行方法 class Program { st

C# 的 委託事件

由於本人都是自學的程式設計,哪裡不對的望見諒和指出。謝謝! 一、委託 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Th

Asynchronous Programming with async and await (C#)asyncawait實現非同步程式設計

You can avoid performance bottlenecks and enhance the overall responsiveness of your application by using asynchronous programming. Howe

c++cingetline實現輸入回車結束輸入

今天做一道測試題遇到了一個麻煩,我想要先讀入一個字串,再讀入一個整數,迴圈往復,直到字串是空,也就是說回車鍵結束迴圈。 最開始的想法是: string s;int d; while(cin>>s){ cin>>d; // prece

C委託事件

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

華為hybrid 技術;實現不同vlan交換機互相通信

col lan 分享 ima title watermark alt 結果 times 實驗任務:1. vlan10和vlan5 都能和vlan50互通;2. vlan10和vlan5 之間不能通!3. 如下華為拓撲圖:實驗步驟:1. 進交換機sw12創建 vlan 5 v

C#——基於委託事件的多執行緒通訊(同樣適用於非UI執行緒通訊

在研究c# 執行緒之間通訊時,發現傳統的方法大概有三種 ①全域性變數,由於同一程序下的多個程序之間共享資料空間,所以使用全域性變數是最簡單的方法,但要記住使用volatile進行限制。 ②執行緒之間傳送訊息(這個隨後文章中會討論到)。 ③CEvent為MFC中的一

JAVA wait()notifyAll()實現線程通訊

all row cache string runnable private sync ide cached 本例是閱讀Think in Java中相應章節後,自己實際寫了一下自己的實現 import java.util.concurrent.ExecutorService

Java利用waitnotify實現執行緒通訊

       Java的Object類提供了wait和notify方法用於實現執行緒間通訊(因為所有的java類都繼承了Object類,所以所有的java類都有這兩個方法)。這兩個方法在Object類中籤名如下: pu

三層交換機實現不同vlan通訊

1.器材 二層交換機為神州數碼DCS-3950,路由交換機為神州數碼DCRS-5650,路由器為神州數碼DCR-2600。 2.原理 2.1交換機的帶外管理和帶內管理 交換機的管理方式可以分為帶內管理和帶外管理兩種管理模式。所謂帶內管理,是指管理控制資訊與資料業務資訊通過

一起talk C栗子吧(第九十五回:C語言例項--使用共享記憶體進行程序通訊

各位看官們,大家好,上一回中咱們說的是SystemV IPC結構概述的例子,這一回咱們說的例子是:使用共享記憶體進行程序間通訊。閒話休提,言歸正轉。讓我們一起talk C栗子吧! 共享記憶體是SystemV IPC結構這種抽象概念的一種具體物件。就和它的

C#委託事件(WPF實現關閉子視窗B時觸發A視窗事件

     遇到一個問題,子視窗關閉時,主視窗如何知道子視窗關閉了,並執行相應的處理事件。為了解決這個問題查閱資料後可以用委託和事件來完成。 一、委託 1、委託:        委託是安全封裝方法的型別,類似於 C 和

分分鐘C#中的委託事件

  每一個初學C#的程式猿,在剛剛碰到委託和事件的概念時,估計都是望而卻步,茫然摸不到頭腦的。百度一搜,關於概念介紹的文章大把大把的,當然也不乏深入淺出的好文章。可看完這些文章,大多數新手,估計也只是信心滿滿的覺得自己看懂了,一旦要在自己的程式中用上委託和事件,就傻眼了,根本不知道什麼情況下該用,也不知

詳解C#委託事件(二)

  一、當我們使用關鍵字delegate宣告一個自定義委託型別時,實際上是聲明瞭一個該名稱的類型別,繼承自抽象類System.MulticastDelegate,還包含例項方法Invoke、BeginInvoke、EndInvoke:   public delegate void MyDelegate

C# 委託事件的區別

主要區別:1.事件在類外繫結事件只能用“+=”(“-=”解綁),不能使用‘=’繫結;如果在類內部繫結事件可以用‘=’;        2.委託在類內類外都可以用"+="、"-="、"=";      3.事件的呼叫(執行)只能在類內呼叫;委託(公有)在類內類外都可以呼叫   例子: cl

C#中的委託事件---通俗易懂

每一個初學C#的程式猿,在剛剛碰到委託和事件的概念時,估計都是望而卻步,茫然摸不到頭腦的。百度一搜,關於概念介紹的文章大把大把的,當然也不乏深入淺出的好文章。可看完這些文章,大多數新手,估計也只是信心滿滿的覺得自己看懂了,一旦要在自己的程式中用上委託和事件,就傻眼了,根本不知