DataGridView中单元格的鼠标左键和右键单击事件

时间:2018-08-02 10:44:56

标签: c# winforms datagridview mouseevent

我正在尝试获得一个事件,如果您在DataGridView中单击鼠标左键,该单元格的内容将进入Textbox。如果右键单击DataGridView中的单元格,内容也将进入不同的Textbox。这是我到目前为止的代码

  private void dataGridView2_mirror_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        switch (MouseButtons)
        {
            case MouseButtons.Left:
                textBox3.Text = dataGridView2_mirror.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                break;

            case MouseButtons.Right:
                textBox4.Text = dataGridView2_mirror.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                break;
        }
    }

我遇到的问题是,它无法识别正在单击的单元格,就像我将代码放入常规MouseEventArgs中以向下按下鼠标一样,该代码将识别出它是否是右键单击或单击鼠标左键。

2 个答案:

答案 0 :(得分:1)

我在下面提出了这个想法。另外,我认为最好使用CellMouseUp或CellMouseDown事件。

private void dataGridView2_mirror_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button.HasFlag(MouseButtons.Left))
            {
                textBox3.Text = dataGridView2_mirror.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                return;
            }

            if (e.Button.HasFlag(MouseButtons.Right))
            {
                textBox4.Text = dataGridView2_mirror.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                return;
            }
        }

答案 1 :(得分:0)

您不是要测试当前的按钮值,而是要枚举它自己,该枚举与if (1 == 1) ..((或更确切地说是None == some integer)相同)

最小的解决方法是更改​​为

switch (e.Button)

但是:MouseButtons是一个标志枚举,这意味着可以有多个值是正确的。养成只测试您实际想要的标志的习惯,并始终像这样测试它们:

e.Button.HasFlag(MouseButtons.Left)..

这使得使用switch变得很困难,但是如此频繁且仅用两个按钮来识别switch还是没有任何意义。