ecco una prima cosa che vorrei ricordarmi in futuro.
ho sempre trovato comoda la possibilità di poter aggiungere in una combobox non solo semplici stringhe di testo, ma interi oggetti anche complessi.
Cioè, scrivere qualcosa del tipo:
Me.ComboBox1.Items.Add(New FileInfo("C:\Autoexec.bat"))
Poi, ma non mi ricordo bene, fare l'overloading di ToString per mostrare a video quello che si vuole. Io ho bisogno di fare questa cosa anche per in una treeview, e ho visto che il metodo Add di Nodes accetta due cose: o stringhe o altri nodes.
Panic.
Sfogliando l'sdk, ecco la soluzione, che non so fino a che punto sia bella oppure no. La proprietà Tag di ogni singolo TreeNode può contenere qualsiasi Object, perciò ecco qui la soluzione...
Dim NodoTemp as TreeNode
NodoTemp = Me.trvElenco.Nodes.Add("C:\Autoexec.bat")
NodoTemp.Tag = New FileInfo("C:\Autoexec.bat")
A questo punto facendo CType(Me.trvElenco.SelectedNode.Tag, FileInfo) io posso accedere all'oggetto FileInfo inserito per quel TreeNode. Vado per deduzione (non ho controllato) dicendo che questo vale per tutti gli altri oggetti Windows Form che dispongono della proprietà Tag.
Altra soluzione, che ho appena provato, suggerita da Corrado Cavalli. Effettivamente basta creare una classe che eredita da TreeNode, più o meno così:
Imports System.IO
Public Class TreeNodeAvanzato
Inherits System.Windows.Forms.TreeNode
Public FileInfo As FileInfo
End Class
A questo punto io posso aggiungere alla collection Nodes della mia TreeView l'oggetto di tipo TreeNodeAvanzato e recuperarlo poi così:
Dim NodeSel As TreeNodeAvanzato
NodeSel = Me.trvElenco.SelectedNode
MessageBox.Show(NodeSel.FileInfo.FullName)
così è molto meglio, sicuramente. Grazie!