Formular aus TreeView in vb.net anzeigen
-
24-10-2019 - |
Frage
Ich versuche, eine bestimmte Form mit einer TreeView -Steuerung zu zeigen, deren Knoten ihre haben tag
Wert auf eine Instanz des Formulars festgelegt, das ich zeigen muss. Der Code, den ich in der DoubleClick -Veranstaltung habe, funktioniert zum ersten Mal großartig, aber danach erhalte ich eine Objektausnahme. Wie Sie sehen können, habe ich versucht, das Tag zurückzusetzen, aber das hat nicht funktioniert. Gibt es eine Möglichkeit, das Formular mehr als einmal zu zeigen, ohne eine Switch -Anweisung zu durchlaufen, wenn die Ausnahme eingeht und das Tag auf die richtige Form des Formulars zurücksetzt? Ich hätte gerne etwas Schöneres, wie ich die Form zeige.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim fm2 As New Form2()
Dim fm3 As New Form3()
TreeView1.Nodes(0).Tag = fm2
TreeView1.Nodes(1).Tag = fm3
End Sub
Private Sub TreeView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.DoubleClick
Try
CType(TreeView1.SelectedNode.Tag, Form).Show()
Catch odex As ObjectDisposedException
TreeView1.SelectedNode.Tag = New Form()
TreeView1_DoubleClick(sender, e)
Catch nrex As NullReferenceException
'No node selected, do nothing.
End Try
End Sub
End Class
Lösung
Ihr Problem hier ist, wenn der Benutzer das Formular schließt, das Objekt entsorgt wurde.
Es gibt einige Möglichkeiten, wie Sie damit umgehen können, einige eleganter als die anderen.
- Fügen Sie einen Handler für formx_closed () hinzu. Zu diesem Zeitpunkt können Sie die Tag -Referenz zurücksetzen
- Sie können zu einem "Anzeigendialog" -Prozess wechseln und dann zurücksetzen, bevor Ihre DoubleClick () -Methode endet
Es hängt wirklich davon ab, was diese Formen tun. Normalerweise würde ich sehen, wie Ihre DoubleClick -Methode eine Suche durchführt und dann die Instanz erstellt.
Suchbeispiel
Wie in den Kommentaren angefordert, würde ich, wenn ich dies auf eine andere Art und Weise tun würde, einen Aufzählungswert oder sogar einen einfachen Ganzzahl -Schlüsselwert für das Tag verwenden. Dann würde ich so etwas wie Folgendes erstellen, um es zu zeigen.
Select Case myTag
Case 1
Dim formInstance As New Form1()
formInstance.Show()
Case Else
Dim formInstance As New Form2()
formInstance.Show()
End Select
Grundsätzlich zentralisieren Sie es und starten Sie das Formular bei Bedarf. Sie können dies für ein anderes Designmuster ausschalten, wenn Sie mehr Kontrolle haben oder viele verschiedene Formyptypen haben.
Andere Tipps
Das Formular wird entsorgt, wenn es vom Benutzer geschlossen wird. Eine Möglichkeit besteht darin, das Schließereignis des Formulars ANS zu verbergen, anstatt zu schließen.