2012-11-11 49 views
0

我有一個面板(Panel1),兩個組合框(ComboBox1,ComboBox2)和一個按鈕(Button1)全部以相同的形式(Form1)。呼叫外部用戶控件的名稱

當按鈕被點擊:的a

Private Sub Button1_Click(sender As Object, e As EventArgs) 
    Dim a as String = ComboBox1.SelectedValue() & Combobox2.SelectedValue() 
    AddUserControl(a) 
End Sub 

的值例如是p1k1外部用戶控件的名稱。 我可以使用以下方法在Form1中添加名爲p1k1Panel1的外部用戶控件嗎?

Private Sub AddUserControl(ByVal a As String) 
    Panel1.Controls.Add(a) 
End Sub 

我應該怎麼做,以使這項工作?

通常我會用:

Panel1.Controls.Add(new p1k1) 
+1

你看着這裏? http://msdn.microsoft.com/en-us/library/wccyzw83.aspx – NeverHopeless

回答

0

你需要使用reflection做到這一點。事情是這樣的:

Private Sub AddUserControl(ByVal a As String) 
     Dim controlType As Type = Type.GetType(a) 
     If controlType Is Nothing Then 
      Throw New ArgumentException(String.Format("""{0}"" is not a valid type. Type names are case sensitive.", a)) 
     ElseIf Not controlType.IsSubclassOf(GetType(Control)) Then 
      Throw New ArgumentException(String.Format("""{0}"" does not inherit from Control. Only Controls can be added to the control collection.", a)) 
     End If 

     Dim newControl As Control = Activator.CreateInstance(controlType) 
     If newControl Is Nothing Then 
      Throw New ArgumentException(String.Format("Unspecified error when creating control of type ""{0}"".", a)) 
     End If 
     Panel1.Controls.Add(newControl) 
    End Sub 
+0

我爲newControl變量獲得了空值 –

+0

這意味着:1)由「a」引用的字符串不是有效的類型名稱或2 )該類型不從Control繼承(因此無法添加到Control集合中)。檢查我已添加簡單類型檢查的編輯代碼。 –

+0

出現異常編號1,不是有效的類型名稱...如何解決此問題?我的項目解決方案中的usercontrol文件名是p1k1.vb ....爲什麼它被認爲不是有效的類型名稱? –

0

,我發現我的答案終於...

私人小組AddUserControl(一BYVAL作爲字符串)
昏暗nmspace的String = 「myNameSpace對象」
昏暗的T作爲類型= Assembly.GetExecutingAssembly()。的GetType(nmspace & 「」 &一個)
昏暗O作爲對照= Activator.CreateInstance(T)
Panel1.Controls.Add(O)
結束小組