1

ユーザーが既存の TreeNode を TreeView 内のどこかにドラッグすることで開始されるドラッグ/ドロップ イベントをキャプチャすることに興味があります。ユーザーが TreeNode をドラッグしている間、ノードが 2 つのツリー ノード間でドラッグされたときにキャプチャすることに関心があります。ユーザーがこれを行うとき、ツリー ノード間にハッシュ マークを表示して、ノードが子としてノード内にドロップされるか、兄弟としてノード内にドロップされるかを指定したいと考えました。このハッシュ マークは、次のいずれかを表示します。宛先ノード)、前または後...

DragOver イベントを使用して、ある程度の前進を遂げました。マウスの位置を計算し、マウスをドラッグしながら上下のノードを導き出しています。

        int threshold = 8;  //Joe(hack)
        Point mouseLocation = mouseLocation = treeViewConditions.PointToClient(new Point(e.X, e.Y - threshold));
        TreeNode topNode = treeViewConditions.GetNodeAt(mouseLocation);
        mouseLocation = treeViewConditions.PointToClient(new Point(e.X + threshold, e.Y));
        TreeNode bottomNode = treeViewConditions.GetNodeAt(mouseLocation);

        if (topNode != null && bottomNode == null)
        {
            textBoxDescription.Text = "handling top node";
        }
        else if (topNode == null && bottomNode != null)
        {
            textBoxDescription.Text = "handling bottom node";
        }
        else if (topNode != null && bottomNode != null)
        {
            if (topNode != bottomNode)
            {
                textBoxDescription.Text = "between!";
            }
            else if (topNode == bottomNode)
            {
            }
        }

しかし、これを行うと、ただ汚いと感じます。これを達成するためのより良い方法を誰かが知っていたかどうか疑問に思っています。

事前にたくさんありがとう!

4

2 に答える 2

2

「ハッシュマーク」を描くことが本当の問題になるでしょう。TreeView には DrawMode プロパティがありますが、その DrawItem イベントではノード間で描画できません。

カーソルを変更して何が起こるかを示すことで、これを処理する必要があります。GiveFeedback イベントを使用して、e.UseCustomCursors を false に設定し、操作を示すカスタム カーソルに Cursor.Current を割り当てます。

于 2010-09-07T21:11:27.460 に答える
1

この記事では、同じ問題を明確に説明し、既にフォローしているアプローチと多少似たアプローチを提供します (ただし、しきい値は基本的にツリー ノードの高さのパーセンテージです)。これに基づいて、そして私が以前にこれを行っていたとき、それが私が見つけることができる最良のアプローチであったという事実に基づいて、あなたは基本的に順調に進んでいると思います.

于 2010-09-07T20:50:56.503 に答える