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. ドラッグ&オペラ11.62とSafariで動作していないドロップ5.1.4
- 3. FirefoxでHTML5のドラッグ&ドロップが動作しないのはなぜですか?
- 4. MailChimpコンテンツブロックドラッグ&ドロップが動作しない
- 5. ドラッグビューのドラッグ&ドロップを作成
- 6. GWT-ドラッグ&ドロップ(ドラッグ&ドロップ)レイアウトの質問
- 7. ドラッグ&ドロップでテキストボックス
- 8. ドラッグ&ドロップでframeLayout
- 9. ドラッグ&ドロップでテキストボックス
- 10. スイングでドラッグ&ドロップ
- 11. グリッドビューでのドラッグ&ドロップ
- 12. データリストアイテムでのドラッグ&ドロップ
- 13. Windowsのドラッグ・ドロップでのドロップの通知
- 14. ビューベースのNSOutlineViewのドラッグ&ドロップのハイライト表示が正しくない
- 15. dojotoolkitのドラッグ&ドロップ
- 16. iPhoneのドラッグ/ドロップ
- 17. ドラッグ&ドロップのオプション
- 18. タブでJQueryのドラッグ&ドロップでノードがクローンされない
- 19. jQuery UIドラッグ&ドロップ要素をドラッグできない?
- 20. IE7ドラッグ&ドロップでTextArea
- 21. ドラッグ&ドロップでHTMLワークフローデザイナー
- 22. FireFoxでは動作しますが、IEでは動作しないドラッグ&ドロップコード
- 23. jQuery UI:オブジェクトのドロップ中にソート可能でドラッグ可能な動作
- 24. ドラッグ可能なサイズ変更がChromeで動作しない
- 25. VSTOでのドラッグ&ドロップでExcel
- 26. ドラッグ可能なアイテムがドロップ可能なアイテムの外側に移動したときにドロップをトリガーする
- 27. Windowsフォームですでに動作するWPFでドラッグ&ドロップを取得します
- 28. ドラッグ&ドロップ発注ngがリピート
- 29. 作成方法Javascriptでソート可能なドラッグ&ドロップのマルチレベルリスト
- 30. Dojoドラッグ・アンド・ドロップ
はhotTrackingと同じではありません。ツリーにホットトラッキングされているかのようにノードを描画するように指示する方法はありますか?セルフドローイングの枠線、ident、アイコン、およびテキストなしで優れています。私はTreeView(SetWindowTheme( "explorer")によって拡張された)と同じ問題に直面した。 – DimDim