Loading...

          java .net

          C# 中的“事件”

          C# 中的事件是當對象滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的對象不必知道需要通知誰,一旦滿足了某個條件,將自動調用該事件,正確通知每個需要通知的對象。通過使用事件,提高了程序的模塊化程度。
            
            要在程序中使用自定義事件,需按以下步驟進行:
            
            1、聲明事件
            
            要在類內聲明事件,首先必須聲明該事件的委托類型:
            public delegate void SelectionChangedEventHandler(object sender,
            SelectionChangedEventArgs 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;
            }
            }
            
            委托類型定義傳遞給處理該事件的方法的一組參數。多個事件可共享相同的委托類型,因此僅當尚未聲明任何合適的委托類型時才需要執行該步驟。
            
            接下來,聲明事件本身:
            public event SelectionChangedEventHandler SelectionChanged;
            
            2、調用事件
            
            如果沒有任何客戶將委托與該事件掛鉤,該字段將為空;否則該字段引用應在調用該事件時調用的委托。因此,調用事件時通常先檢查是否為空,然后再調用事件。
            public class Form2 : System.Windows.Forms.Form
            {
            ... ...
            
            public event SelectionChangedEventHandler SelectionChanged;
            
            ... ...
            
            private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
            {
            if (SelectionChanged != null)
            {
            SelectionChangedEventArgs E = new SelectionChangedEventArgs(comboBox1.Text);
            SelectionChanged(this, E);
            }
            }
            }
            
            3、與事件掛鉤
            
            為了開始接收事件調用,客戶代碼先創建事件類型的委托,該委托引用應從事件調用的方法。然后它使用 += 將該委托寫到事件可能連接到的其他任何委托上。
            public class Form1 : System.Windows.Forms.Form
            {
            ... ...
            
            private Form2 m_frm2;
            
            ... ...
            
            public Form1()
            {
            ... ...
            
            m_frm2 = new Form2();
            
            //與事件掛鉤
            m_frm2.SelectionChanged += new SelectionChangedEventHandler(frm2_SelectionChanged);
            }
            
            ... ...
            
            private void button1_Click(object sender, System.EventArgs e)
            {
            m_frm2.ShowDialog();
            }
            
            private void frm2_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
            //獲取事件傳遞過來的數據
            textBox1.Text = e.Selection;
            }
            }

          posted on 2008-08-26 22:06 閱讀(120) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          公告

          希望有一天

          我能用鼠標雙擊我的錢包

          然后選中一張100元

          按住“ctrl+c”

          接著不停的“ctrl+v”

          嘻嘻~~~笑醒~~~



          導航

          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(6)

          隨筆分類(102)

          隨筆檔案(398)

          文章分類

          文章檔案(10)

          有趣網絡

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乌苏市| 湘潭市| 乌拉特后旗| 金门县| 长治县| 盱眙县| 吉林市| 德昌县| 会昌县| 高清| 闵行区| 泰安市| 壤塘县| 永登县| 开鲁县| 沙河市| 云和县| 枣庄市| 自贡市| 灵山县| 江津市| 拉孜县| 永顺县| 枣庄市| 乐都县| 台前县| 龙口市| 和田市| 新蔡县| 灵石县| 东方市| 铜山县| 永德县| 常熟市| 沂水县| 定安县| 犍为县| 平罗县| 桃园县| 阳高县| 宜兴市|