6

セルにクリックイベントがあるdatagridviewがあります。セルには、次のmouseDownイベントもあります。

if (e.Button == MouseButtons.Left && e.Clicks == 1)
{
    string[] filesToDrag = 
    {
        "c:/install.log"
    };

    gridOperations.DoDragDrop(new DataObject(DataFormats.FileDrop, filesToDrag), DragDropEffects.Copy);
}

セルをクリックしようとすると、mousedownイベントが即座に発生し、セルをドラッグしようとします。たとえば、ユーザーがマウスを1秒間押し続けた場合にのみ、mousedownイベントを発生させるにはどうすればよいですか?ありがとう!

4

1 に答える 1

8

これを行う適切な方法は、時間ではなく、ユーザーがマウスを十分に動かしたときにトリガーすることです。Windows での "十分な移動" の普遍的な尺度は、ダブルクリック サイズです。次のように、CellMouseDown/Move イベント ハンドラーを実装します。

    private Point mouseDownPos;

    private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) {
        mouseDownPos = e.Location;
    }

    private void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e) {
        if ((e.Button & MouseButtons.Left) == MouseButtons.Left) {
            if (Math.Abs(e.X - mouseDownPos.X) >= SystemInformation.DoubleClickSize.Width ||
                Math.Abs(e.Y - mouseDownPos.Y) >= SystemInformation.DoubleClickSize.Height) {
                // Start dragging
                //...
            }
        }
    }
于 2013-01-26T13:54:47.217 に答える