2017-01-05 8 views
0

Я пытаюсь обновить всплывающую подсказку DataGridViewCell, не выходя и возвращая ячейку с помощью курсора.Как обновить подсказку ячейки DataGridView, пока она отображается?

Я назначил новое значение ToolTipText свойствам ячейки, но пока всплывающая подсказка показывает, изменение свойства столбца не влияет на отображаемую всплывающую подсказку.

Это снимок серверного приложения. Люди могут присоединиться и вы можете увидеть их пинг:

Я хочу, чтобы иметь возможность увидеть, как изменения звона.

ответ

1

Когда отображается ToolTip соты, изменение ячейки ToolTipText не меняет текст подсказки инструмента. Чтобы изменить его, вы можете обработать событие CellToolTipChangedDataGridView, чтобы обнаружить изменение в ячейке 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

Я просто обработал событие CellToolTipTextChanged 'DataGridView'. Остальная часть кода находит внутреннее управление всплывающей подсказкой «DataGridView» с использованием отражения и позволяет отображать новый текст всплывающей подсказки. –

+0

Потому что, когда я пытаюсь получить поле, все, что я получаю, это «null». Кажется, я что-то упускаю. –