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