C# 无法使任何DataGridViewCellEventHandler事件正常工作

C# 无法使任何DataGridViewCellEventHandler事件正常工作,c#,datagridview,C#,Datagridview,我已经尝试了很多不同的方法来尝试和触发基于datagridview中的点击的事件。 首先我想做一个基本的,然后我想做一些我在另一个点击事件中使用的东西,希望有人能解释我做错了什么,为什么一种方法有效,而另一种方法无效 public event DataGridViewCellMouseEventHandler CellMouseClick; private void DataGridView1_CellMouseClick(object sender, DataGridViewC

我已经尝试了很多不同的方法来尝试和触发基于datagridview中的点击的事件。 首先我想做一个基本的,然后我想做一些我在另一个点击事件中使用的东西,希望有人能解释我做错了什么,为什么一种方法有效,而另一种方法无效

    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项

对于我想检测的另一个鼠标点击事件,下面的操作成功了,但要让它工作起来似乎需要更多的时间,而上面的操作似乎应该是无缝的,所以我更愿意让上面的操作按预期工作。 这是工作版本

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)
            {

            }
        }
    }

上述代码有效。我试过了。因为我没有完整的代码,所以很难确切地知道哪里出错了

需要注意的一点是,catchexception实际上并没有做任何事情,这导致任何异常都只是在没有通知的情况下通过。你可能有一些例外。尝试打印异常信息或优雅地处理任何异常

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

嗯,经过一段时间的环顾,我终于找到了真正的答案

我不太记得在哪里找到的,但我错过的是这个电话:

    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.
    }

你能更详细地解释一下你的意思吗?这需要你做更多的工作?还有this.dataGridView 1.MouseDown+=new System.Windows.Forms.MouseEventHandlerthis.dataGridView\u MouseDown;可以是this.dataGridView 1.MouseDown+=dataGridView\u MouseDown@dshun似乎需要建立更多的变量,但不管我怎么看,事实仍然是,简单的代码似乎是首选的方法,应该有效,但不起作用,我想知道如何修复它…嗨,我实际上尝试了你的代码,它有效。如果调试f5,有一件事可能会有所帮助,那就是查看是否出现了任何问题。另外,试着检查是否有例外嗨,泰克巨人,好奇代码是否对你有用。顺便提一下,对于你的问题,我不认为你的代码天生就有问题。除此之外,您还可以让contextmenu显示两次。而且你不符合你使用控件的方式。有时称之为this.dataGridView1,有时使用this.contextMenuStrip1,而另一次称之为dataGridView和contextMenuStrip。如果你有resharper,你会发现这个关键字在你的情况下是多余的