代码之家  ›  专栏  ›  技术社区  ›  Max

添加拖放后CellDoubleClick事件不起作用

  •  0
  • Max  · 技术社区  · 15 年前

    private void dataGridView2_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        var obj = dataGridView2.CurrentRow.DataBoundItem;
        DoDragDrop(obj, DragDropEffects.Link);
    }
    

    如何更正此问题以启用CellDoubleClick事件?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Hans Passant    15 年前

    是的,那不行。调用DoDragDrop()将鼠标控制权转换为WindowsD+D逻辑,这将干扰正常的鼠标处理。您需要延迟启动D+D,直到看到用户实际在拖动。这应该能解决问题:

        Point dragStart;
    
        private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) {
            if (e.Button == MouseButtons.Left) dragStart = e.Location;
        }
    
        private void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e) {
            if (e.Button == MouseButtons.Left) {
                var min = SystemInformation.DoubleClickSize;
                if (Math.Abs(e.X - dragStart.X) >= min.Width ||
                    Math.Abs(e.Y - dragStart.Y) >= min.Height) {
                    // Call DoDragDrop
                    //...
                }
            }
        }