Forum: PC-Programmierung VC++ 2008 Treview IndexOf


von C++ (Gast)


Lesenswert?

Hallo allerseits,

ich grüble schon länger und finde keine Lösung zu meinem Vorhaben mit 
VC++2008:

Habe ein Treeview, und versuche anhand der ermittelten Koordinaten
(z.B.   String^ ZielNodeKoord = 
treeView2->PointToClient(Point(e->X,e->Y))).ToString();
  -> liefert z.B. {X=123.Y=123}
den Index des dazu gehörenden Items an dieser Position zu ermitteln. Wie 
arbeite ich hier richtig mit "IndexOf"?

von bluppdidupp (Gast)


Lesenswert?

Das sieht nach .NET aus, da könntest du einfach die .HitTest Funktion 
verwenden:
http://msdn.microsoft.com/en-us/library/z6sb88bz.aspx

von Jean Player (Gast)


Lesenswert?

Hi,
ich verstehe dich so, das du die momentan ausgewewählte Node haben 
willst.
Dann wäre das das richtige.
1
 int myNodeCount = myTreeView.SelectedNode.GetNodeCount(true);

von C++ (Gast)


Lesenswert?

Leider keine Selektion. Trotzdem vielen Dank an die Helfer.
Wenn ich etwas in das TreeView droppe, möchte ich feststellen, auf 
welches Item ich gedropped habe.
Analog dazu: Windows-Explorer, wenn eine Datei in ein Laufwerk (c:\ oder 
d:\ oder ... ) gedropped wird, wie stellt man da das betroffene Laufwerk 
fest? Ich würde das im TreeView also mittels des Item-Index machen. Die 
Koordinaten habe ich ja. Und mit den Koordinaten könnte ich doch 
irgendwie an den Index des Item kommen?

von C++ (Gast)


Lesenswert?

C++ schrieb:
> das betroffene Laufwerk

wobei es bei mir aber keine Laufwerke sind. Es sind Sammlungen von 
Datensätzen.

von bluppdidupp (Gast)


Lesenswert?

Wenn du .HitTest() mit den Koordinaten aufrufst, bekommst du als 
Ergebnis unter anderem den getroffenen Node (bzw. null wenn keins 
getroffen) zurück.
Darüber kannst du dann auch den Index bekommen, sofern dir der Node 
nicht sogar lieber ist.

von C++ (Gast)


Lesenswert?

So, hier also meine Lösung:


{
  TreeViewHitTestInfo^ info = treeView2->HitTest(e->X, e->Y);
  TreeNode^ hitNode;
  if (info->Node != nullptr)  {
    hitNode = info->Node;
    MessageBox::Show(((hitNode->Index)-6).ToString());
    }
}

Nur komisch, dass er mir für den ersten Node "7" ausgibt. Daher die 
"-6".

Nochmals Dank an die Helfer!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.