如何覆盖C#datagridview的默认工具提示行为,以增加特定单元格的工具提示延迟

我有一个Windows窗体应用程序,在C#中绑定了datagridview。 我正在寻找一种方法来增加特定列的单元格的工具提示持续时间。 通过设置cell.TooltipText属性,在CellMouseEnter处理程序中设置工具提示。 从我在互联网上做的研究来看,似乎我应该有一个外部工具提示对象来增加延迟。 但为此,看起来,ShowCellToolTips应该设置为false。 我需要将ShowCellToolTips设置为true,因为正在为其他各种函数中的其他列单元格设置cell.ToolTipText。 有没有办法覆盖特定列的单元格的默认cell.ToolTipText属性,并具有外部Tooltip对象显示工具提示? 目标是将ShowCellToolTips设置为true并增加工具提示的延迟或为用户提供关闭工具提示的控件。 有没有办法做到这一点? 任何帮助将非常感谢。 谢谢。

您可以在DataGridView中使用常规ToolTip控件,这样您就可以使用ToolTip的duration属性来设置ToolTip的显示时间。

试试这个:

  • 将ToolTip控件添加到表单
  • 使用DGV的CellToolTipTextNeeded(或CellMouseEnter)事件来确定是否要显示工具提示,如果是,则调用ToolTip的ToolTip.Show方法。

这是一个例子:

private void dataGridView1_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e) { if (e.ColumnIndex == 2) { // Display the tool tip only on DGV ColumnIndex 2. Rectangle cellRect = dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false); toolTip1.Show("This is my ToolTip text", this, dataGridView1.Location.X + cellRect.X + cellRect.Size.Width, dataGridView1.Location.Y + cellRect.Y + cellRect.Size.Height, 5000); // Duration: 5 seconds. } else if (e.ColumnIndex >= 0 && e.RowIndex >= 0) { toolTip1.Hide(this); dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ToolTipText = " Hello from column: " + e.ColumnIndex.ToString(); } } 

请注意,我们没有使用CellToolTipTextNeeded事件来设置DataGridViewCell的ToolTipText属性。

使用ToolTip控件的一个优点是,您可以通过ToolTip控件的属性自定义ToolTip的外观和行为。

我认为您可以关闭DataGridView.ShowToolTip并处理MouseEnter事件。

有关使用工具提示的信息,请参阅此微软文章: http : //msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellmouseenter.aspx

使用JayRiggs解决方案时遇到的一个问题是,当网格有一个不显示全文的列时,会显示两个工具提示。 一个是显示的自定义工具提示,另一个是默认工具提示。