允许丢弃和..
好的,假设您在 Form_Load... ei 中声明/创建了所有事件:
tlAssemblies.DragDrop +=tlAssemblies_DragDrop;
tlAssemblies.MouseDown +=tlAssemblies_MouseDown;
tlAssemblies.MouseMove +=tlAssemblies_MouseMove;
tlAssemblies.DragEnter +=tlAssemblies_DragEnter;
tlAssemblies.DragOver += tlAssemblies_DragOver;
拖动事件用于当您在 treeView 中触发拖动事件时,这就是它起作用的原因。dragEnter 是当您输入不同* 控件的边界时。
即你想从treeview 1 拖到treeview2 中。
如果您不尝试将项目拖动到不同的控件中,则 dragEnter 是错误的。
这是一个拖放事件示例:
private void tlAssemblies_DragDrop(object sender, DragEventArgs e)
{
if (sender == null)
return;
Point p = tlAssemblies.PointToClient(new Point(e.X, e.Y));
TreeListNode dragNode = e.Data.GetData(typeof(TreeListNode)) as TreeListNode;
TreeListNode targetNode = tlAssemblies.CalcHitInfo(p).Node;
if (targetNode == null)
{
return;
}
不确定是否可行,但您可能想要更改您拥有的 dragEnter 代码并在拖动事件中简单地使用它,即
e.Effect = DragDropEffects.Move;
如果你没有离开你来回拖动的同一个控件,不妨显示拖动运动。
您可以做的另一件事是在 treeView_MouseMove 事件上。
private void tlAssemblies_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && downHitInfo != null)
{
Size dragSize = SystemInformation.DragSize;
Rectangle dragRect = new Rectangle(new Point(downHitInfo.HitPoint.X - dragSize.Width / 2,
downHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);
if (!dragRect.Contains(new Point(e.X, e.Y)))
{
DataRow row = viewProduct.GetDataRow(downHitInfo.RowHandle);
if(row != null)
tlAssemblies.DoDragDrop(row, DragDropEffects.Move);
//viewProduct.GridControl.DoDragDrop(row, DragDropEffects.All);
downHitInfo = null;
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
}
}
}