【问题标题】:How to refresh tooltip of a DataGridView cell while it's shown?如何在显示时刷新 DataGridView 单元格的工具提示?
【发布时间】:2017-12-09 00:22:54
【问题描述】:

我正在尝试刷新DataGridViewCell 的工具提示,而不用光标离开并重新进入单元格。

我为单元格的ToolTipText 属性分配了一个新值,但是在显示工具提示时,更改列的ToolTipText 属性对显示的工具提示没有任何影响。

这是我的服务器应用程序的快照。人们可以加入,您可以看到他们的 ping:

我希望能够看到 ping 的变化。

【问题讨论】:

    标签: c# .net winforms datagridview tooltip


    【解决方案1】:

    当显示单元格的ToolTip 时,更改单元格的ToolTipText 不会自动更改工具提示文本。要更改它,您可以处理DataGridViewCellToolTipChanged 事件以检测单元格的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();
    }
    

    【讨论】:

    • 所以上面你得到了名为“toolTipControl”的字段,它在哪里设置?
    • 我刚刚处理了DataGridViewCellToolTipTextChanged 事件。其余代码是使用反射找到DataGridView 的内部工具提示控件并使其显示新的工具提示文本。
    • 因为当我尝试获取该字段时,我得到的只是null。我想我错过了什么。
    • 只需像我一样创建一个简单的示例并使用这些代码,屏幕截图是从代码的实际执行中截取的。
    • 找出问题所在。为了将 DoubleBuffer 属性设置为 true,我创建了一个自定义类。显然这就是它找不到 toolTipControl 字段的原因。无论如何,非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多