台灣最大程式設計社群網站
線上人數
1161
 
會員總數:243449
討論主題:188175
歡迎您免費加入會員
討論區列表 >> VB.NET >> 事件如何連結多種方法?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
事件如何連結多種方法?
價值 : 100 QP  點閱數:173 回應數:9

樓主

city
初學者
50 29
972 169
發送站內信

請問各位前輩們:


假設Class1裡面有1個事件 及1個觸發事件的方法

Form1將Class1的事件連結到Form1裡面的方法 如下:



以上程式碼可運行

由於寫Class1時 不知道Form1觸發Class1的事件後要做什麼
因此Class1的事件就沒有輸入的參數
Public Event A()
並沒有Byval Byref參數


假設今天我在Form1 觸發Class1的事件 想連結以下方法:



方法BB 多了1個Byref參數


如果我把程式碼改成如下:



以上程式碼會出現錯誤
AddHandler n.A, AddressOf BB

無法將Class1的事件 連結到BB方法


請問各位前輩們 該如何解決這個問題?
謝謝~~

搜尋相關Tags的文章: [ VB.NET ] , [ 事件 ] , [ 連結 ] , [ 多種 ] , [ 方法 ] ,
本篇文章發表於2018-10-17 23:21
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

city
檢舉此回應
我目前使用的解決方法是:使用共用屬性 如下:





把BB的Byref值拿掉
多一個bt屬性


這個方法會增加共用變數
我覺得沒有很好

各位前輩們有什麼方法嗎?
謝謝~~
本篇文章回覆於2018-10-17 23:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

city
檢舉此回應
所以...各位前輩們覺得1樓的方法是正確的?
(使用共用屬性來傳送資料)

就是Class1裡面的事件是空白的(沒有Byval Byref參數)

之後如果有Form要呼叫Class1
想要將Class1的事件 連結到Form裡面的方法(有Byval Byref參數)
就用共用屬性來傳送資料

是這樣嗎?
本篇文章回覆於2018-10-18 23:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

city
檢舉此回應
Class1裡面的事件是空白的(沒有Byval Byref參數)

原因是不知道Form呼叫事件後要做什麼事

比如:

Form1呼叫Class1事件 是要Button.Text=Nothing
Form2呼叫Class1事件 是要Form.Text=Nothing
Form3呼叫Class1事件 是要Form.Text=Nothing + Button.Text=Nothing
本篇文章回覆於2018-10-19 00:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

誰是誰
檢舉此回應
完全看不懂你倒底想幹嘛
本篇文章回覆於2018-10-19 00:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

city
檢舉此回應
To:誰是誰


假設 我要寫個程式:[資料夾路徑存在就開啟資料夾 資料夾不存在就顯示錯誤訊息]
用最一般的寫法 如下:




今天 我想用Class的寫法 改成如下:


這時候程式碼會出現錯誤
AddHandler a.ET, AddressOf AA 這行會出錯
原因是事件與方法的簽章不同

像這樣的狀況該如何改?

當然 如果把Class裡面的事件加上參數就會正常 如下:
Public Event ET(ByVal s As String)

我的想法是 Class1不動
因為Class1可能被很多不同的專案呼叫
每個專案觸發Class1的事件後 要執行的內容都不同
不太可能由Class1來配合各個專案 寫出不同參數的事件

因此我的想法是 Class1的事件參數保持空白 如下:
Public Event ET()
再由各個專案去連結事件方法

以我的範例來說
Private Sub AA(ByVal s As String)
方法AA需要一個參數值
而這個參數值要從Button1_Click方法去給它

可是我Class1的ET事件沒有參數 因此會出現錯誤

有個解決方法是 用共用屬性來傳遞資料 如下:


這樣程式就可行了

不過Form1裡面會多了一個共用屬性
Private Property s As String

我的想法是:
有沒有其他的方法可以解決這個問題?
讓[空白事件]可以連結[有參數的方法]
本篇文章回覆於2018-10-19 15:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

練武功
檢舉此回應
不要用 AddHandler n.A, AddressOf AA
改用 Private WithEvents n As Class1
參考程式碼如下

本篇文章回覆於2018-10-19 17:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

誰是誰
檢舉此回應
樓主要不要先弄清楚 Event 是幹嘛用的? Eevnt 的宣告有甚麼內涵?
https://docs.microsoft.com/zh-tw/dotnet/standard/events/
本篇文章回覆於2018-10-19 22:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

city
檢舉此回應
To:誰是誰

原來是EventArgs阿...
本篇文章回覆於2018-10-20 00:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

city
檢舉此回應
To:練武功

我發現之前的觀念是錯的

應該如同7樓 [誰是誰]大大說的那樣

用 Public Event ET(ByVal sender As System.Object, ByVal e As System.EventArgs) 這樣就夠了
本篇文章回覆於2018-10-20 00:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.