線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1512
推到 Plurk!
推到 Facebook!

C# 程式模擬元件的事件

答題得分者是:code6421
C200113
一般會員


發表:5
回覆:3
積分:1
註冊:2003-11-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-15 17:23:10 IP:61.59.xxx.xxx 未訂閱
環境是VS C# Windows Form 請問: 1.在程式中,如何得知委派給[某元件的某一事件]的函式為何? 2.假設有一Button元件,若Click事件未委派或是在不清楚委派的事件函式為何的情況下,如何以程式模擬元件的事件(類似Delphi的Button.Click事件,事先不需知道Click事件到底呼叫哪個函式)??
code6421
版主


發表:43
回覆:223
積分:208
註冊:2002-08-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-15 20:52:11 IP:220.135.xxx.xxx 未訂閱
引言: 環境是VS C# Windows Form 請問: 1.在程式中,如何得知委派給[某元件的某一事件]的函式為何?
除了Instance自身外,無從得知,因為封裝式設計的關係.
引言: 2.假設有一Button元件,若Click事件未委派或是在不清楚委派的事件函式為何的情況下,如何以程式模擬元件的事件(類似Delphi的Button.Click事件,事先不需知道Click事件到底呼叫哪個函式)??
架構上不允許這樣做,理由同上. 正規引發事件的方式應該是模擬其行為,例如以模擬訊息來引發UI事件. 當然,要說捷徑也不是沒有.......
  using System.Reflection;
  ........
  private void HackCallEvent(object instance,
                             string eventName,EventArgs args)
  {
        MethodInfo mi = instance.GetType().GetMethod("On" eventName,BindingFlags.NonPublic|BindingFlags.Instance);
        if(mi != null)
          mi.Invoke(instance,new object[]{EventArgs.Empty});
  }
  
  sample.         HackCallEvent(button3,"Click",EventArgs.Empty);
  
這段程式碼是利由.NET Framework 1.0/1.1 的特定行為 及Control 的設計慣例來操作. Just coding... Taiwan:http://code6421.ktop.com.tw China:http://home.hoolee.com/~code6421 發表人 - code6421 於 2004/10/15 20:53:57 發表人 - code6421 於 2004/10/15 20:55:16 發表人 - code6421 於 2004/10/15 21:00:27
------
Just codeing...
C200113
一般會員


發表:5
回覆:3
積分:1
註冊:2003-11-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-15 21:56:33 IP:61.59.xxx.xxx 未訂閱
經實作測試,此方法果然可行 感謝code6421兄賜教
系統時間:2024-07-07 21:52:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!