当单元格值发生更改时,在DataGridView上显示ToolTip

时间:2015-05-01 10:18:35

标签: c# datagridview tooltip

我希望在DataGridView控件中的单元格值更改且引入的值无效时显示ToolTip

这可以通过下面的代码轻松完成,但问题是在显示ToolTip后,它也与控件相关联,因此每次DataGridView都悬停时ToolTip显示1}},我希望它在数据更改后只显示一次。

我注意到只有DataGridViewGroupBox才会发生这种情况。使用TextBoxButton ToolTip时, public partial class Form1 : Form { this.dataGridView1.ShowCellToolTips = false; // so we can show regular tooltip } private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { DataGridView control = (DataGridView)sender; // check if control.Rows[e.RowIndex].Cells[e.ColumnIndex].Value is valid if (invalid) { toolTip.Show("Invalid data", dataGridView1, 5000); } } 与控件无关联。

为什么会这样?

  work.price_wrapper {
      overflow-x: autol;
      overflow-y: auto;
      max-width: 400px;
      width: 100%;
 }

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题。当你离开Hide时,最简单和最直接的似乎是ToolTip DataGridView

private void dataGridView1_Leave(object sender, EventArgs e)
{
    toolTip1.Hide(this);
}

当然,由您决定在错误仍然存​​在的情况下应该发生什么的全部设计......!

至于Textboxes:它们非常特殊,并且通常没有用于询问它们为什么表现不同......

另一种方法是对Popup事件进行编码并使用Tag作为标志来确保它只显示一次:

在CellValueChanged中显示之前,您需要设置一个标志:

 toolTip1.Tag = "true";

并在Popup事件中检查它:

private void toolTip1_Popup(object sender, PopupEventArgs e)
{
    if (toolTip1.Tag == null) return;
    bool show = toolTip1.Tag.ToString() == "true";
    if (toolTip1.Tag != "true") e.Cancel = true;
    toolTip1.Tag = "false";
}