我希望在DataGridView
控件中的单元格值更改且引入的值无效时显示ToolTip
。
这可以通过下面的代码轻松完成,但问题是在显示ToolTip
后,它也与控件相关联,因此每次DataGridView
都悬停时ToolTip
显示1}},我希望它在数据更改后只显示一次。
我注意到只有DataGridView
和GroupBox
才会发生这种情况。使用TextBox
或Button
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%;
}
答案 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";
}