Oppure

Loading
17/10/10 10:19
gvigliani
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
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:
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.

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


aaa
17/10/10 14:29
Il Totem
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).
aaa
17/10/10 14:51
gvigliani
Il codice relativo alla chiamata di tvmarkets è quello gia' postato .
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 è:

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
aaa
18/10/10 16:30
Il Totem
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.
aaa
18/10/10 17:42
gvigliani
Hai ragione . Avevo dimenticato di postare il codice da te richiesto.
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
aaa
19/10/10 18:59
Il Totem
Postato originariamente da gvigliani:

Hai ragione . Avevo dimenticato di postare il codice da te richiesto.
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 19/10/10 18:59
aaa
19/10/10 19:22
gvigliani
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

 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 :asd: ma che è quella che in effetti mi interessa.

Grazie
aaa
19/10/10 19:44
Il Totem
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.
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.
aaa