无法使任何DataGridViewCellEventHandler事件有效

时间:2015-07-10 22:20:13

标签: c# datagridview

我一直在尝试根据我的datagridview中的点击尝试触发事件的方法有很多种。 首先,我想提出一个基本的example from MDN,然后我想把我正在使用的东西用于另一个有效的点击活动,希望有人可以解释我的意思做错了,为什么一种方式有效而另一种方式无效。

    public event DataGridViewCellMouseEventHandler CellMouseClick;
    private void DataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {

        System.Text.StringBuilder cellInformation = new System.Text.StringBuilder();
        cellInformation.AppendFormat("{0} = {1}", "ColumnIndex", e.ColumnIndex);
        cellInformation.AppendLine();
        cellInformation.AppendFormat("{0} = {1}", "RowIndex", e.RowIndex);
        cellInformation.AppendLine();
        MessageBox.Show(cellInformation.ToString(), "CellMouseClick Event");
    }

请注意,我也尝试删除此公共事件调用。另外,我得到一个工具提示,显示在公共事件调用的CellMouseClick部分,表示我从不使用CellMouseClick项。

对于我想要检测的另一个鼠标点击事件,下面设法工作,但它似乎需要更多才能使它工作,上面看起来它应该如此无缝地工作,所以我&#39 ; d更愿意让上述内容按预期工作。 这是工作版本。

public Form1()
    {
        InitializeComponent();
        this.dataGridView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.dataGridView_MouseDown);
        this.toolStripMenuItem1.Click += new System.EventHandler(this.toolStripMenuStrip1_Click);

    }

private void dataGridView_MouseDown(object sender, MouseEventArgs e)
    {
        var hti = dataGridView1.HitTest(e.X, e.Y);
        if (e.Button == MouseButtons.Right)
        {

            try
            {
                dataGridView1.ClearSelection();
                dataGridView1.Rows[hti.RowIndex].Selected = true;
                this.dataGridView1.CurrentCell = this.dataGridView1.Rows[hti.RowIndex].Cells[1];
                this.contextMenuStrip1.Show(this.dataGridView1, e.Location);
                contextMenuStrip1.Show(Cursor.Position);
            }
            catch (Exception)
            {

            }
        }
    }

2 个答案:

答案 0 :(得分:0)

以上代码有效。我尝试过这个。由于我没有完整的代码,因此很难确切地知道哪里出错。

有一点需要注意的是,catch(异常)并没有真正做任何事情,导致任何异常只是通过,恕不另行通知。你可能有一些例外。尝试打印出异常信息或优雅地处理任何异常。

         catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

答案 1 :(得分:0)

好吧,经过一段时间环顾四周,我找到了实际答案。

我不太清楚我发现它的位置,但我错过的是这个电话:

    dataGridView1.CellMouseClick += dataGridView1_CellMouseClick;

MSDN网站似乎表明这是在事件处理程序之前进行的调用:

    public event DataGridViewCellMouseEventHandler CellMouseClick;

这两个阶梯不起作用。如果上面那个试图回答这个问题的人确实让它发挥作用,我会想象用户根据经验添加了他们知道要添加的东西,并且可能认为我正在这样做。因此,为了清楚起见,这是导致事件发挥作用的最终产品:

     public Form1()
    {
        InitializeComponent();

        dataGridView1.CellMouseClick += dataGridView1_CellMouseClick;
    }


    private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        //whatever you want to happen when the mouse is clicked in a cell.
    }