gvigliani (Normal User)
Pro
Messaggi: 106
Iscritto: 30/12/2006
|
Ciao a tutti.
Ho un problemino che , come sempre , spero mi aiuterete a risolvere. Ho una TreeView con dei nodi e sottonodi ed un Panel che dovrebbe ricevere una informazione relativa al nodo cliccato e trasportato.
ho creato questa sub relativa alla treeview
Codice sorgente - presumibilmente VB.NET |
Private Sub tvMarkets_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles tvMarkets.DragEnter If e.Data.GetDataPresent(DataFormats.Text) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub
|
Mentre queste altre 2 si riferiscono al Panel che riceve:
Codice sorgente - presumibilmente VB.NET |
Private Sub tbox_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles tbox.DragEnter If e.Data.GetDataPresent(DataFormats.Text) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub Private Sub tbox_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles tbox.DragDrop Dim dummy As String = "hello" Dim s As String = CStr(e.Data.GetData(dummy.GetType())) s = s.Substring((s.IndexOf(":") + 1)).Trim() Position.X = e.X Position.Y = e.Y Position = tbox.PointToClient(Position) MsgBox(s) End Sub
|
Il problema è che il codice mi comunica , tramite la msgbox(s) il testo relativo al nome del nodo e non il Node.Name che a me interessa.
Avete un modo per risolvere il mio problema?
Allego anche il codice che mi da' proprio questa informazione se clicco sul nodo interessato senza ovviamente il drag & Drop.
Codice sorgente - presumibilmente VB.NET |
Private Sub tvMarkets_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvMarkets.AfterSelect If e.Node.Nodes.Count = 0 Then Dim marketId As Integer = Val(e.Node.Name) 'This is the selected marketId End If End Sub
|
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Posta il codice che contiene la chiamata a DoDragDrop, il nome del nodo e il valore di s (ossia il risultato atteso e quello effettivo).
|
|
gvigliani (Normal User)
Pro
Messaggi: 106
Iscritto: 30/12/2006
|
Il codice relativo alla chiamata di tvmarkets è quello gia' postato .
Codice sorgente - presumibilmente VB.NET |
Private Sub tvMarkets_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles tvMarkets.DragEnter If e.Data.GetDataPresent(DataFormats.Text) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub ' questa è per il Drag_enter del Panel che riceve Private Sub tbox_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles tbox.DragEnter If e.Data.GetDataPresent(DataFormats.Text) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub ' Questo è il DragDrop che riceve Private Sub tbox_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles tbox.DragDrop Dim dummy As String = "hello" Dim s As String = CStr(e.Data.GetData(dummy.GetType())) s = s.Substring((s.IndexOf(":") + 1)).Trim() Position.X = e.X Position.Y = e.Y Position = tbox.PointToClient(Position) MsgBox(s) End Sub
|
La Treeview contiene Nodi e sottonodi annidati. Soltanto l'ultimo nodo contiene in node.name un codice numerico intero per risalire a informazioni contenute in Api.
Il codice a cui risalgo cliccando semplicemente sul nodo della Treeview è:
Codice sorgente - presumibilmente VB.NET |
Private Sub tvMarkets_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvMarkets.AfterSelect If e.Node.Nodes.Count = 0 Then [b]Dim marketId As Integer = Val(e.Node.Name)[/b] End If End Sub
|
Come si puo' evincere dall'immagine allegata, esistono dei nodi principali e poi a scalare sempre piu' in profondita' fino ad arrivare a quelli definitivi i cui nomi sono:
Risultato Esatto
Asian Handicap
Piu' / Meno 6,5 gol
etc
Soltanto questi nodi , contengono in node.name il codice di ricerca con i dati associati e che, in questo caso , sono quelli relativi alle quote etc.
Grazie |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ti ho detto di postare il codice contenente la chiamata a DoDragDrop. Dato che ti stai crucciando su ciò che viene visualizzato (presumo sia node.Text, non l'hai detto) vorrei almeno vedere se hai associato al drag la proprietà giusta, ossia node.Name.
|
|
gvigliani (Normal User)
Pro
Messaggi: 106
Iscritto: 30/12/2006
|
Hai ragione . Avevo dimenticato di postare il codice da te richiesto.
Codice sorgente - presumibilmente VB.NET |
Private Sub tvMarkets_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles tvMarkets.ItemDrag Dim strItem As String = e.Item.ToString() DoDragDrop(strItem, DragDropEffects.Copy Or DragDropEffects.Move) End Sub
|
Nello specifico mi viene proposto il nome del nodo e non il suo contenuto.
Ho provato a sostituire a strItem il node.Name ma mi dà errore.
Saluti
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Postato originariamente da gvigliani:
Hai ragione . Avevo dimenticato di postare il codice da te richiesto.
Codice sorgente - presumibilmente VB.NET |
Private Sub tvMarkets_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles tvMarkets.ItemDrag Dim strItem As String = e.Item.ToString() DoDragDrop(strItem, DragDropEffects.Copy Or DragDropEffects.Move) End Sub
|
Nello specifico mi viene proposto il nome del nodo e non il suo contenuto.
Ho provato a sostituire a strItem il node.Name ma mi dà errore.
Saluti |
Prima chiariamo una cosa. Il nome del nodo è il valore contenuto nella proprietà node.Name. ll contenuto del nodo è una locuzione ambigua, quindi non la prenderò in considerazione. Il testo del nodo è il valore esposto dalla proprietà node.Text.
Nella fattispecie, e.Item è di tipo Object, ma nel caso sia l'argomento di un evento richiamato da treeview contiene un oggetto di tipo TreeViewNode. Quindi e.Item.ToString() equivale a node.ToString(), che equivale a node.Text (oppure a "System.Windows.Forms.TreeViewNode", non ricordo), ma sicuramente non a node.Name.
Risolto l'arcano... Ultima modifica effettuata da Il Totem il 19/10/2010 alle 20:59 |
|
gvigliani (Normal User)
Pro
Messaggi: 106
Iscritto: 30/12/2006
|
Caro amico,
ti ringrazio innanzitutto per lo sforzo che stai facendo per capire il mio problema.
L'arcano non è per me risolto e continua a rimanere tale.
Dai una occhiata a 'sto codice
Codice sorgente - presumibilmente VB.NET |
For j = 1 To UBound(Ids) If Not Nodes.ContainsKey(Ids(j)) Then Dim Node As New TreeNode 'Add a new node if it doesn't exist Node.Text = If(j <= UBound(Names), Names(j), .marketName) Node.Name = Ids(j) 'This is the key Node.Tag = Format(.eventDate.AddHours(2), "HH:mm") end if next j
|
Come puoi notare , in node.text memorizzo il nome del Nodo, in node.name il codice che mi interessa, ed in node.tag la data dell'evento.
Il valore che dovrei riuscire a recuperare è quello contenuto in Node.Name che sara' anche ambigua ma che è quella che in effetti mi interessa.
Grazie
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ma questo non cambia quello che hai scritto. Tu hai detto che vuoi trascinare node.name, però in DoDragDrop passi nome.Text, quindi mi sembra evidente ciò che devi cambiare per ottenere il risultato che vuoi.
Codice sorgente - presumibilmente C# / VB.NET |
Dim Id As String = DirectCast(e.Item, TreeViewNode).Name
|
N.B.: ciò che stai facendo è molto poco elegante. Potevi usare una struttura e metterla tutta nel tag.
|
|