我一直在尝试根据我的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)
{
}
}
}
答案 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.
}