【问题标题】:Button doesn't receive mouse click when placed over DataGridView放置在 DataGridView 上时,按钮不接收鼠标点击
【发布时间】:2016-11-26 10:03:52
【问题描述】:

我尝试使用按钮将文件名和路径加载到 DataGridView 单元格中。 我将按钮放在这样的单元格上:

var cellRectangle = dataGridView.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);
int buttonX = dataGridView.Location.X + cellRectangle.Location.X + cellRectangle.Width - btnLoadFile.Width;
int buttonY = dataGridView.Location.Y + cellRectangle.Location.Y;

btnLoadFile.Location = new Point(buttonX + 20, buttonY);
btnLoadFile.Height = cellRectangle.Height - 2;
btnLoadFile.Visible = true;
btnLoadFile.BringToFront();

我希望用户单击按钮,在 FileDialog 中选择文件等。 问题是按钮没有被点击。网格单元改为接收点击。

有谁知道为什么会发生这种情况以及我该如何处理?

【问题讨论】:

  • 使按钮成为数据网格视图的子项,否则重新路由按钮单击事件
  • @Uthistran :刚刚尝试过。按钮仍然没有响应点击......
  • 这听起来不对。你可能只是没有正确连接它。如果您可以看到并单击它调用它的单击事件。在设计器中双击它会发生什么?
  • @TaW :是的,它看起来也错了。该按钮位于网格顶部。如果我点击它,按钮不会改变它的外观,而是按钮下方的单元格获得焦点,就好像我点击了单元格而不是按钮一样。当然有事件过程链接到按钮。
  • 按钮是怎么添加的?在设计师?在代码中?任何以任何方式修改按钮的代码?您可以删除它并重新添加该按钮吗?它是添加到表单还是添加到 dgv.Controls? - 还有:清理并重新构建!

标签: c# datagridview buttonclick


【解决方案1】:

试试这个...

dataGridView.Controls.SetChildIndex(btnLoadFile, 0);
// Bring it to the front
btnLoadFile.BringToFront();

也许你不需要最后一行...

【讨论】:

  • 不幸的是它没有改变任何东西......与以前相同的行为
【解决方案2】:

我会使用 DataGridViewButtonColumn 而不是在网格上方绘制一个按钮。 这会在每一行内为您提供一个按钮。

https://msdn.microsoft.com/de-de/library/system.windows.forms.datagridviewbuttoncolumn(v=vs.110).aspx

如果您想让按钮位于另一个显示电子邮件的单元格中,您可以派生所需的 editcell 类型并实现 TextBox 和 Button 的组合,并使按钮仅在处于编辑模式时可见。看这里 https://msdn.microsoft.com/de-de/library/7tas5c80(v=vs.100).aspx 了解更多信息。我会向您发布一些代码,但不幸的是我只为不同的目的制作了自己的单元格/编辑控件。

【讨论】:

  • 是的,我知道这个选项,但只是在表单上放置一个按钮并将其放在单元格上似乎要简单得多。此外,我不希望整个列都充满按钮,这对用户来说并没有提供信息,只是杂乱无章
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 2012-02-05
  • 2013-12-12
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
相关资源
最近更新 更多