台灣最大程式設計社群網站
線上人數
1772
 
會員總數:246224
討論主題:189786
歡迎您免費加入會員
討論區列表 >> VB.NET >> 被呼叫的函式不能有Try Catch,也不能除錯?
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
被呼叫的函式不能有Try Catch,也不能除錯?
價值 : 150 QP  點閱數:873 回應數:18
樓主

city
初學者
230 43
1735 231
發送站內信

各位前輩大大們好:

我知道這樣說很荒謬 但是...

先來個程式碼:

(若下面內容有任何錯誤 歡迎各位大大們指正)

===========================================================================================
[一]



以上:
Form1的Button1_Click呼叫了Class1的Divide方法
但是Class1的Divide方法會出現錯誤
程式就卡住了

===========================================================================================
[二]

為了解決問題 在Class1裡面加上Try Catch
如下:


以上:
Class1的Divide方法捕捉到了錯誤 但是卻無法通知Form1 並由Form1來處理錯誤出現後該怎麼做

===========================================================================================
[三]

如果Form1 Class1都加上Try Catch
如下:


以上:
Class1捕捉到了錯誤
卻無法通知Form1
也無法由Form1的Try Catch來決定出現錯誤後該怎麼處理
也無法關閉Form1的Button1_Click方法

===========================================================================================
[四]

Form1加上Try Catch
Class1不加Try Catch
如下:


以上:
Class1沒有Try Catch
Form1有Try Catch

Form1捕捉到了Class1的錯誤 並且可以自由的決定該怎麼做

所以:Class1不該有Try Catch?

===========================================================================================
[五]

以上是Try Catch的範例 以下是Class除錯的範例:


如上:
Class1的方法會對參數進行除錯
Class1偵測到錯誤的參數 可以進行部分的錯誤處理 例如:
1.出現錯誤訊息
2.出現錯誤訊息,由使用者決定是否忽略錯誤繼續執行或結束程式
3.結束Class的SetFormTitle方法
4.結束程式

可是Class1卻無法通知Form1出現錯誤了 並由Form1來處理發生錯誤時該怎麼做
Class1也不能關閉Form1的Button1_Click方法 使它不要進行後續的程式碼

就算Form1加上了Try Catch也是無法捕捉Class1的錯誤

===========================================================================================
[六]

如果Class1不對參數進行除錯
Form1加上Try Catch捕捉錯誤
如下:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Class1.SetFormTitle(Nothing, Nothing)
Catch ex As Exception
'捕捉到了Class1的錯誤 並且可以自由的決定該怎麼做
End Try

MessageBox.Show(Me.Text)
End Sub
End Class


Public Class Class1
Public Shared Sub SetFormTitle(ByRef f As Form, ByVal s As String)
f.Text = s
End Sub
End Class
</pre>

以上:
Class1並不進行參數除錯
而Form1順利的捕捉到Class1的錯誤 並且可以自由的決定該怎麼做

所以:Class1不該除錯?

===========================================================================================

不知道各位大大們能否了解以上我所說的?

在Class1裡面 如果有Try Catch 或是自訂的除錯機制
發生錯誤後 只能做出部分的處理 例如:
1.出現錯誤訊息
2.出現錯誤訊息,由使用者決定是否忽略錯誤繼續執行或結束程式
3.結束Class1裡面的方法
4.結束程式

如果要完整且自由的決定:發生錯誤時該如何處理
只能將Try Catch寫在Form1裡面

如果Form1有Try Catch
而Class1有Try Catch或是自訂的除錯機制
將會搶先攔截到錯誤訊息 而無法將錯誤訊息傳回給Form1

也就是說:
Class1要故意不寫Try Catch 要故意不寫自訂的除錯機制 這樣才能將錯誤訊息傳回給Form1?

因此:
Class1不能有Try Catch? 也不能有自訂的除錯機制?

各位大大們怎麼看呢?
各位大大們又該是如何做的呢?

謝謝~~

搜尋相關Tags的文章: [ 被呼叫 ] , [ 函式 ] , [ 不能 ] , [ Try Catch ] , [ 除錯 ] ,
本篇文章發表於2019-01-12 10:03
16樓
作者回應

city
檢舉此回應
To:誰是誰

[與使用者介面互動] [類別庫專案]
這兩種情境目前還沒接觸過
目前還是在專案內使用Class.vb(非.dll庫)的情境

哈哈
本篇文章回覆於2019-01-12 22:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
17樓
回應

誰是誰
檢舉此回應
[與使用者介面互動] 你怎麼會沒寫過呢?

你一定寫過這樣的東西,在畫面上放置一個 Button ,接著為這個 Button 的 Click 事件撰寫其委派函式。
這個委派函式作用不就是處理 "使用者按下畫面上的 Button 後要做的事情" 嗎 ?

本篇文章回覆於2019-01-12 23:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
18樓
作者回應

city
檢舉此回應
To:誰是誰

原來大大說的[與使用者介面互動]是指這個

了解了 感謝大大的說明 :)
本篇文章回覆於2019-01-13 11:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

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