I have a treeview control (vb.net in Visual Studio) with multiple nodes, when the end user clicks on a node it opens a specific form. This is working fine, but I notice something peculiar:
When I click nodeA, it opens formA. I then decide to click on nodeB, and it opens formB as it should.
Now, let's say I click nodeA, it opens formA. Now I want to open another instance of formA so I click nodeA again but nothing happens, it doesn't open formA again. The only way to get formA to open again is to click on nodeB or another treeview level (parent node etc.) and then go back to nodeA and click it and then it'll open another instance of formA.
Any idea how I can open the same form multiple times by clicking the node multiple times without having to click some different node and then coming back to the original node to open the form multiple times?
Thank you in advance.
Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect
Dim con As New SqlConnection
Dim cmd As New SqlCommand
Dim frm As String
con.ConnectionString = "Data Source=myServer;Initial Catalog=myDB;Integrated Security=True"
cmd.Connection = con
If e.Node.Text = "MyApp" Then
cmd.CommandText = "SELECT FormName FROM Menu WHERE Application = @Form"
frm = cmd.ExecuteScalar()
If frm Is Nothing Then 'The selected node does not have a form
Dim f As Form = GetFormByName(frm)
f.Show() 'Open the form selected in the TreeView control
Me.BringToFront() 'Bring the MyAppMenu form to the front to be able to have it appear behind the other forms in the next line
Me.SendToBack() 'Send the MyAppMenu form behind the form just opened in the f.show() line
Private Function GetFormByName(ByVal pFormName As String) As Form
'Try to create a type form using the name specific in pFormName. The False is to prevent an exception because in the If statement we are checking if the Type is null (meaning nothing found)
Dim T As Type = Type.GetType(pFormName, False)
If T Is Nothing Then 'If nothing is found then add the current namespace (ie. MyApp.Prospects)
Dim strFullname As String = Application.ProductName & "." & pFormName
T = Type.GetType(strFullname, True, True) 'The second True is to do a case-insensitive search for strFullname
Return CType(Activator.CreateInstance(T), Form)