У меня возникла проблема, когда при перетаскивании отображается значок no
, и я не могу перетаскивать свои данные из моего представления данных.
Я пробовал многие вещи, в основном просто код других людей,
однако я устал от того, что они не работают, поэтому я написал свой собственный, используя этот код ..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinformsTest
{
public partial class LayerForm : Form
{
public BindingList<Layer> Items = new BindingList<Layer>();
private int dragDropItemDragIndex;
private int dragDropItemDropIndex;
public LayerForm()
{
InitializeComponent();
dataGridView1.DataSource = Items;
//dataGridView1.RowPrePaint += new DataGridViewRowPrePaintEventHandler(dgv_RowPrePaint);
}
//Toolstrip menu
private void addToolStripMenuItem_Click(object sender, EventArgs e)
{
Items.Add(new Layer());
dataGridView1.Columns[0].Width = 24;
dataGridView1.Columns[0].MinimumWidth = 24;
dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
//Drag and drop
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
var pointInfo = dataGridView1.HitTest(e.X, e.Y);
if (pointInfo.RowIndex != -1 && pointInfo.ColumnIndex != -1)
{
DoDragDrop(null, DragDropEffects.Move); //null because we handle the value through the swap method
dragDropItemDragIndex = pointInfo.RowIndex;
dragDropItemDropIndex = pointInfo.RowIndex;
}
}
private void dataGridView1_DragDrop(object sender, DragEventArgs e)
{
var point = dataGridView1.PointToClient(new Point(e.X, e.Y));
var pointInfo = dataGridView1.HitTest(point.X, point.Y);
if (pointInfo.RowIndex != -1 && pointInfo.ColumnIndex != -1)
{
e.Effect = DragDropEffects.Move;
dragDropItemDropIndex = pointInfo.RowIndex;
Swap(dragDropItemDragIndex, dragDropItemDropIndex);
}
}
private void dataGridView1_DragEnter(object sender, DragEventArgs e)
{
var point = dataGridView1.PointToClient(new Point(e.X, e.Y));
var pointInfo = dataGridView1.HitTest(point.X, point.Y);
if (pointInfo.RowIndex != -1 && pointInfo.ColumnIndex != -1)
{
e.Effect = DragDropEffects.Move;
dragDropItemDropIndex = pointInfo.RowIndex;
Swap(dragDropItemDragIndex, dragDropItemDropIndex);
}
}
private void Swap(int oldIndex, int newIndex)
{
var itemOld = Items[oldIndex];
var itemNew = Items[newIndex];
Items[oldIndex] = itemNew;
Items[newIndex] = itemOld;
}
}
}
Мой ожидаемый результат заключается в том, что элементы меняются, когда я перетаскиваю их.
Я также ожидаю, что мышь превратится в значок перетаскивания.