C# 在树视图中拖动节点时显示工具提示
当拖动节点时,尽管我得到了移动图标,但在我的示例中没有显示工具提示文本,正如在给定的SimpleExample中一样,使用Andrey Gliznetsov的方法 添加工具提示对象和使用SetToolTip方法似乎不会影响这一点。如何获得工具提示以在拖动时显示被拖动节点的文本(和图标)C# 在树视图中拖动节点时显示工具提示,c#,winforms,treeview,C#,Winforms,Treeview,当拖动节点时,尽管我得到了移动图标,但在我的示例中没有显示工具提示文本,正如在给定的SimpleExample中一样,使用Andrey Gliznetsov的方法 添加工具提示对象和使用SetToolTip方法似乎不会影响这一点。如何获得工具提示以在拖动时显示被拖动节点的文本(和图标) ]在TreeViewAdv.Input.cs中,您可以找到此方法 private void CreateDragBitmap(IDataObject data) { if (UseCol
]在TreeViewAdv.Input.cs中,您可以找到此方法
private void CreateDragBitmap(IDataObject data)
{
if (UseColumns || !DisplayDraggingNodes)
return;
这将防止在使用列时创建_dragBitmap。如果必须在不进行修改的情况下使用TreeViewAdv控件dll,则要查看工具提示,唯一的解决方法是不使用列(属性UseColumns=False)
但由于提供了源代码,您可以修改CreateDragBitmap,方法是从该方法中的第一个if语句中删除条件UseColumns,并在foreach NodeControl循环中添加一个条件,以便在绘制第一个if语句后退出:
private void CreateDragBitmap(IDataObject data)
{
if (!DisplayDraggingNodes) //removed UseColumns as OR condition here
return;
TreeNodeAdv[] nodes = data.GetData(typeof(TreeNodeAdv[])) as TreeNodeAdv[];
if (nodes != null && nodes.Length > 0)
{
Rectangle rect = DisplayRectangle;
Bitmap bitmap = new Bitmap(rect.Width, rect.Height);
using (Graphics gr = Graphics.FromImage(bitmap))
{
gr.Clear(BackColor);
DrawContext context = new DrawContext();
context.Graphics = gr;
context.Font = Font;
context.Enabled = true;
int y = 0;
int maxWidth = 0;
foreach (TreeNodeAdv node in nodes)
{
if (node.Tree == this)
{
int x = 0;
int height = _rowLayout.GetRowBounds(node.Row).Height;
foreach (NodeControl c in NodeControls)
{
Size s = c.GetActualSize(node, context);
if (!s.IsEmpty)
{
int width = s.Width;
rect = new Rectangle(x, y, width, height);
x += (width + 1);
context.Bounds = rect;
c.Draw(node, context);
if (UseColumns) //only show first column if using columns
break;
}
}
y += height;
maxWidth = Math.Max(maxWidth, x);
}
}
if (maxWidth > 0 && y > 0)
{
_dragBitmap = new Bitmap(maxWidth, y, PixelFormat.Format32bppArgb);
using (Graphics tgr = Graphics.FromImage(_dragBitmap))
tgr.DrawImage(bitmap, Point.Empty);
BitmapHelper.SetAlphaChanelValue(_dragBitmap, 150);
}
else
_dragBitmap = null;
}
}
}
导致
如果要在拖动时查看所有列,请省略If(UseColumns)分隔符代码>更改,如下所示