Перетаскивание Winforms - Предварительный просмотр перетащить элемент не скрывается после перетаскивания - PullRequest
0 голосов
/ 07 января 2019

следующий код используется для перетаскивания элемента из элемента мозаичного изображения в элемент управления списком деревьев. он использует элементы управления devexpress.

но после того, как вы уронили предмет, предварительный просмотр перетаскиваемого предмета прикрепляется к окну, как показано на рисунке ниже, и он не скрывается, пока его не наведет курсор мыши. есть ли способ спрятаться?

enter image description here

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, чтобы начать перетаскивание

...