2017-05-03 7 views
0

オブジェクトのデータ型を関数に渡さないのはなぜですか?あなたはどうやって周りを回っていますか?GetTypeを使用して関数に渡す方法

Dim MyObj as new CustomObj 
Dim t As Type = MyObj.GetType 
Call My_Fuction(Of t) 

私がファイルにシリアライズ可能なオブジェクトを保存していますし、後でそれらを開き、コードはオブジェクト・データ型に基づいてUIを見つける必要があるので、対象物からのUIを読み込むことができ

Private Function My_Fuction(Of t As Base_Object)() As UserControl 
Dim UI_Type As Type = GetType(UI_Common_Panel(Of t)) 
For Each Object_type As Type In Project_Solution.GetTypes()  
For Each Itype As Type In Object_type.GetInterfaces() 
     If Itype Is UI_Type Then Return DirectCast(Activator.CreateInstance(Object_type), UI_Common_Panel(Of t))  
Next 
Next 
Return Nothing 
End Function 
+1

なぜあなたは、C#とVB.NETのコードをタグ付けしていますか? – itsme86

+0

どちらの言語でも回答を受け入れるので、私は両方のタグを付けました –

+2

一般的な制約の仕組みが混乱していると思います – Plutonix

答えて

0

あなたの質問にすべてのカスタムクラスがあるので、良い答えを与えるのは難しいです。あなたが解決しようとしている問題は、オブジェクトのTypeに基づいて新しいコントロールを作成する場合は、ここでは、内蔵使用してその制御を行うための方法です:

Function GetControl(o As Object) As Control 
    If o.GetType Is GetType(Boolean) Then 
    Return New CheckBox With {.Checked = DirectCast(o, Boolean)} 
    ElseIf o.GetType Is GetType(Date) Then 
    Return New DateTimePicker With {.Value = DirectCast(o, Date)} 
    ElseIf o.GetType Is GetType(String) Then 
    Return New TextBox With {.Text = DirectCast(o, String)} 
    Else 
    Return New TextBox With {.Text = o.ToString} 
    End If 
End Function 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim c As Control = GetControl("Hello, world!") 
    Me.Controls.Add(c) 
    c.Visible = True 

    Dim c2 As Control = GetControl(#05/04/2017#) 
    Me.Controls.Add(c2) 
    c2.Visible = True 
    c2.Top = 100 
End Sub 
関連する問題