如何在显示时刷新 DataGridView 单元格的工具提示?
How to refresh tooltip of a DataGridView cell while it's shown?
我正在尝试刷新 DataGridViewCell
的工具提示,而无需使用光标离开并重新进入单元格。
我为单元格的 ToolTipText
属性 分配了一个新值,但是在显示工具提示时,更改列的 ToolTipText
属性 没有任何值对正在显示的工具提示的影响。
这是我的服务器应用程序的快照。人们可以加入,您可以看到他们的 ping:
我希望能够看到 ping 是如何变化的。
当单元格的 ToolTip
显示时,更改单元格的 ToolTipText
不会自动更改工具提示文本。要更改它,您可以处理 DataGridView
的 CellToolTipChanged
事件以检测单元格 ToolTipText
中的变化。然后你可以检查 DataGridView
使用这样的代码在工具提示中显示新文本:
private void dgv_CellToolTipTextChanged(object sender, DataGridViewCellEventArgs e)
{
var grid = (DataGridView)sender;
var toolTipControl = grid.GetType().GetField("toolTipControl",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance).GetValue(grid);
var activated = (bool)toolTipControl.GetType()
.GetProperty("Activated").GetValue(toolTipControl);
if (activated)
{
var cell = grid[e.ColumnIndex, e.RowIndex];
var ActivateToolTip = typeof(DataGridView).GetMethod("ActivateToolTip",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
ActivateToolTip.Invoke(grid,
new object[] { true, cell.ToolTipText, e.ColumnIndex, e.RowIndex });
}
}
例子
例如,我更改了计时器中单元格的 ToolTipText
以获得以下结果:
private void timer1_Tick(object sender, EventArgs e)
{
this.dataGridView1.Rows[0].Cells[0].ToolTipText = DateTime.Now.ToString();
}
我正在尝试刷新 DataGridViewCell
的工具提示,而无需使用光标离开并重新进入单元格。
我为单元格的 ToolTipText
属性 分配了一个新值,但是在显示工具提示时,更改列的 ToolTipText
属性 没有任何值对正在显示的工具提示的影响。
这是我的服务器应用程序的快照。人们可以加入,您可以看到他们的 ping:
我希望能够看到 ping 是如何变化的。
当单元格的 ToolTip
显示时,更改单元格的 ToolTipText
不会自动更改工具提示文本。要更改它,您可以处理 DataGridView
的 CellToolTipChanged
事件以检测单元格 ToolTipText
中的变化。然后你可以检查 DataGridView
使用这样的代码在工具提示中显示新文本:
private void dgv_CellToolTipTextChanged(object sender, DataGridViewCellEventArgs e)
{
var grid = (DataGridView)sender;
var toolTipControl = grid.GetType().GetField("toolTipControl",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance).GetValue(grid);
var activated = (bool)toolTipControl.GetType()
.GetProperty("Activated").GetValue(toolTipControl);
if (activated)
{
var cell = grid[e.ColumnIndex, e.RowIndex];
var ActivateToolTip = typeof(DataGridView).GetMethod("ActivateToolTip",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
ActivateToolTip.Invoke(grid,
new object[] { true, cell.ToolTipText, e.ColumnIndex, e.RowIndex });
}
}
例子
例如,我更改了计时器中单元格的 ToolTipText
以获得以下结果:
private void timer1_Tick(object sender, EventArgs e)
{
this.dataGridView1.Rows[0].Cells[0].ToolTipText = DateTime.Now.ToString();
}