2009-01-16 70 views
0

我正在幫助一位同事爲他的應用程序開發一個「catch all」類型的錯誤處理程序。他想要做的是傳遞具有錯誤的對象,以及該對象的類型,例如TextBox或ComboBox,然後在其處理程序中調用DirectCast方法以正確地處理其中的Text屬性。一般來說,該方法是尋找這樣的:我可以以編程方式設置DirectCast命令的對象類型嗎?

Protected Sub SpecialErrorHandler(ByVal TargetControl As Object, ByVal ControlType As String) 

    MessageBox.Show("Bad Juice: " & DirectCast(TargetControl, ControlType(ObjType)).Text) 

End Sub 

迄今爲止任何嘗試做DirectCast方法中的類型轉換(因爲它期望在一般簽名的對象),或即使在一個類型通過對象正確設置不起作用。

這裏的任何想法,或者是這些「鑄造不這樣工作」。類型場景?

回答

2

DirectCast()在編譯時需要一個實型,所以它知道調用的結果是什麼樣子。您可以在此期望的最好方式是針對您期望的每個對象投射一個通用的基本類型。在這種情況下,你很幸運,因爲你有一個相當有用的基類型:Control

+0

我有一種預感,但首先想要在這裏與大師分享。謝謝! – 2009-01-16 22:21:01

1

您可以使用反射來提取屬性。另外,如果你知道對象總是一個Control,爲什麼不把它轉換爲Control然後獲取控件的Text屬性?

Control errorObject = (Control)TargetControl; 
MessageBox.Show("Error..."+errorObject.Test)); 

(對不起,C#代碼,而不是熟悉VB,而應該是差不多了。)

+0

不用擔心C#代碼。我正在向他傳達這個可能性。如果他不需要比文本字段更復雜的東西,他應該全部設置。謝謝! – 2009-01-16 22:21:41

0

需要注意的是,如果沒有一個超類,像Control在這種情況下,是什麼你正在尋找的將與Option Strict Off版本的TargetControl.Text幾乎相同,因爲該類直到運行時才被確定。

相關問題