следующий код используется для перетаскивания элемента из элемента мозаичного изображения в элемент управления списком деревьев. он использует элементы управления devexpress.
но после того, как вы уронили предмет, предварительный просмотр перетаскиваемого предмета прикрепляется к окну, как показано на рисунке ниже, и он не скрывается, пока его не наведет курсор мыши.
есть ли способ спрятаться?
public partial class Form1 : Form
{
TileViewHitInfo tileDownHitInfo = null;
public Form1()
{
InitializeComponent();
gridControldsdsds1.DataSource = GetTable();
treeList1.DataSource = GetTable();
tileView13333.OptionsDragDrop.AllowDrag = true;
}
static DataTable GetTable()
{
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
return table;
}
private void tileView1_MouseMove(object sender, MouseEventArgs e)
{
TileView view = sender as TileView;
if (view == null) return;
if (e.Button == MouseButtons.Left && tileDownHitInfo != null)
{
Size dragSize = SystemInformation.DragSize;
Rectangle dragRect = new Rectangle(new Point(tileDownHitInfo.HitPoint.X - dragSize.Width / 2,
tileDownHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);
if (!dragRect.Contains(new Point(e.X, e.Y)))
{
DataRow row = view.GetDataRow(tileDownHitInfo.RowHandle);
view.GridControl.DoDragDrop(row, DragDropEffects.Move);
tileDownHitInfo = null;
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
}
}
}
private void tileView1_MouseDown(object sender, MouseEventArgs e)
{
TileView view = sender as TileView;
if (view == null) return;
tileDownHitInfo = null;
TileViewHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));
if (Control.ModifierKeys != Keys.None) return;
if (e.Button == MouseButtons.Left && hitInfo.RowHandle >= 0)
tileDownHitInfo = hitInfo;
}
private void treeList1_DragDroppp(object sender, DragEventArgs e)
{
var ext = e.Data.GetData(typeof(DataRow));
e.Effect = DragDropEffects.None;
}
private void treeList1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(DataRow)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
здесь я использовал событие MouseDown и MouseMove, чтобы начать перетаскивание