2017-01-05 258 views
0

我正在嘗試刷新DataGridViewCell的工具提示,而不必使用光標離開並重新進入單元格。如何在顯示DataGridView單元格時刷新工具提示?

我爲單元格的ToolTipText屬性指定了一個新值,但是當工具提示顯示時,更改列的屬性對正在顯示的工具提示沒有任何影響。

這是我的服務器應用程序的快照。人們可以加入,你可以看到他們平安:

我希望能夠看到怎樣的改變平。

回答

1

當單元格的ToolTip顯示時,更改單元格的ToolTipText不會自動更改工具提示文本。要更改它,您可以處理CellToolTipChanged事件DataGridView以檢測單元格的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(); 
} 

enter image description here

+0

所以上面你會得到一個名爲「toolTipControl領域「,那一套在哪裏? –

+0

我剛剛處理'DataGridView'的'CellToolTipTextChanged'事件。剩下的代碼使用反射找到DataGridView的內部工具提示控件,並使其顯示新的工具提示文本。 –

+0

因爲當我嘗試獲取字段時,我所得到的都是'null'。我想我錯過了一些東西。 –

相關問題