HotTrackingプロパティを持つ単純なTreeViewがTrueに設定されています。これは、アイテム上にマウスを移動すると機能します。しかし、それは私がドラッグを使用すると動作しません&ドロップとツリービューアイテム上の何かをドラッグします。 DragDropでHotTrackingを使用する方法はありますか?または任意の回避策?TreeViewのHotTrackingがドラッグ&ドロップで動作しない
1
A
答えて
1
コントロールは、D + D通知のみを受け取り、マウスメッセージは表示されません。
private void treeView1_DragOver(object sender, DragEventArgs e) {
if (e.Data.GetDataPresent("something")) {
var pos = treeView1.PointToClient(new Point(e.X, e.Y));
var hit = treeView1.HitTest(pos);
if (hit.Location == TreeViewHitTestLocations.Label) {
treeView1.SelectedNode = hit.Node;
e.Effect = DragDropEffects.Copy;
}
else e.Effect = DragDropEffects.None;
}
}
通常、ユーザーがビューをスクロールしてノードを展開できるようにするには、もっと多くの作業を行う必要があります。
0
ノードを@Hansとして選択するのは簡単な解決策ですが、ノード選択のイベントがある場合、または選択したノードを保持する必要がある場合は使用できません。 私が見つけた唯一の方法は、VisualStylesRendererを使用してノードを作成することです。
private void plTree_DragOver(object sender, DragEventArgs e)
{
Point pt = plTree.PointToClient(new Point(e.X, e.Y));
var overNode = plTree.GetNodeAt(pt);
bool canMoveTo = overNode != null &&
TreeNodeIsFolder(overNode) &&
!IsFirstNodeParentToSecond(GetDraggedNodes(e)[0], overNode);// all dragged nodes are of the same parent
e.Effect = canMoveTo ? DragDropEffects.Move : DragDropEffects.None;
if (overNode == null) return;
if (_lastCustomDrawNode != overNode)
{
NormalDrawNode(_lastCustomDrawNode);
CustomDrawNode(overNode);
}
_lastCustomDrawNode = overNode;
}
private void NormalDrawNode(TreeNode aNode)
{
if (aNode == null) return;
if (_normalNodeRenderer == null)
_normalNodeRenderer = new VisualStyleRenderer("Explorer::TreeView", 1, 1);
Debug.WriteLine("normal render" + DateTime.Now);
RenderTreeNode(_normalNodeRenderer, aNode, true);
_lastCustomDrawNode = null;
}
private void CustomDrawNode(TreeNode aNode)
{
if (_hotNodeRenderer == null)
_hotNodeRenderer = new VisualStyleRenderer("Explorer::TreeView", 1, 2);
Debug.WriteLine("custom render" + DateTime.Now);
RenderTreeNode(_hotNodeRenderer, aNode, false);
}
private void RenderTreeNode(VisualStyleRenderer renderer, TreeNode aNode, bool drawDefaultBck)
{
if(_treeGraphics == null)
_treeGraphics = plTree.CreateGraphics();
const int iconShift = 21;
Rectangle aRec = aNode.Bounds;
var bckRec = new Rectangle(aRec.Location.X - iconShift, aRec.Location.Y, aRec.Width + iconShift, aRec.Height);
if (!drawDefaultBck)
renderer.DrawBackground(_treeGraphics, bckRec);
else
_treeGraphics.FillRectangle(_treebckgBrush, bckRec);
var textRec = new Rectangle(aRec.Location.X + 1, aRec.Location.Y - 1, aRec.Width, aRec.Height);
TextRenderer.DrawText(_treeGraphics, aNode.Text, GetTreeNodeFont(aNode), textRec, Color.FromKnownColor(KnownColor.ControlText));
var imgRec = new Rectangle(aRec.Location.X + 2 - iconShift, aRec.Location.Y, 16, 16);
renderer.DrawImage(_treeGraphics, imgRec, ImageListTree.Images[aNode.ImageIndex]);
}
この記事は、テーマ図面で多くのことができます:ノードを選択 VisualStyleRenderer and themes (WinForms)
+0
Btw誰かが "IconShift"を動的に取得する方法を教えてもらえますか?ハードコードされていませんか? – DimDim
関連する問題
- 1. Firefoxでドラッグ&ドロップが動作しない
- 2. ドラッグ&ドロップがSelenium Pythonで動作しない
- 3. jquery-uiを使用してドラッグ&ドロップが動作しない
- 4. Rxjsを使用してドラッグ&ドロップが動作しない
- 5. ドラッグ&オペラ11.62とSafariで動作していないドロップ5.1.4
- 6. FirefoxでHTML5のドラッグ&ドロップが動作しないのはなぜですか?
- 7. ドラッグ&ドロップがXcodeで動作しません
- 8. dojoドラッグ・ドロップ(DND)が機能しない
- 9. jQueryのドラッグと私はドラッグを作成し、jQueryのドラッグ&ドロップでアプリケーションをドロップしています応答
- 10. ドラッグNドロップが起きていない
- 11. ドラッグ&ドロップ:ドロップは
- 12. ドラッグビューのドラッグ&ドロップを作成
- 13. MailChimpコンテンツブロックドラッグ&ドロップが動作しない
- 14. ドラッグ&ドロップが効かない理由
- 15. GWT-ドラッグ&ドロップ(ドラッグ&ドロップ)レイアウトの質問
- 16. ドラッグして、新しいのjQuery-UI-分で作業していないドロップ1.12
- 17. Selenium Webdriverクロムのバージョン46ではドラッグ&ドロップが動作しませんが、Firefoxでは動作します
- 18. スイングでドラッグ&ドロップ
- 19. ドラッグ&ドロップでテキストボックス
- 20. ドラッグ&ドロップでテキストボックス
- 21. ドラッグ&ドロップでframeLayout
- 22. ドラッグ&ドロップがSelenium 3.0で機能していない
- 23. データリストアイテムでのドラッグ&ドロップ
- 24. グリッドビューでのドラッグ&ドロップ
- 25. カスタムスライダからドラッグ&ドロップできない
- 26. 起動時にTinyMCEエディタを入力できないドラッグ&ドロップ
- 27. Windowsのドラッグ・ドロップでのドロップの通知
- 28. HTMLドラッグアンドドロップ...ドラッグできますがドロップしない
- 29. ドラッグ&ドロップのオプション
- 30. dojotoolkitのドラッグ&ドロップ
はhotTrackingと同じではありません。ツリーにホットトラッキングされているかのようにノードを描画するように指示する方法はありますか?セルフドローイングの枠線、ident、アイコン、およびテキストなしで優れています。私はTreeView(SetWindowTheme( "explorer")によって拡張された)と同じ問題に直面した。 – DimDim