Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何覆盖C#datagridview的默认工具提示行为以增加特定单元格的工具提示延迟_C#_Datagridview - Fatal编程技术网

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

如何覆盖C#datagridview的默认工具提示行为以增加特定单元格的工具提示延迟,c#,datagridview,C#,Datagridview,我有一个windows窗体应用程序,它在C#中绑定了datagridview。我正在寻找一种方法来增加特定列单元格的工具提示持续时间。正在通过设置cell.TooltipText属性在CellMouseEnter处理程序中设置工具提示。从我在互联网上做的研究来看,似乎我应该有一个外部工具提示对象来增加延迟。但是,看起来ShowCellToolTips应该设置为false。我需要将ShowCellToolTips设置为true,因为cell.ToolTipText是为其他各种函数中的其他列单元格设

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

您可以在DataGridView中使用常规工具提示控件,该控件将允许您使用工具提示的持续时间属性来设置工具提示的显示时间

试试这个:

  • 向窗体中添加工具提示控件
  • 使用DGV的CellToolTipTextNeeded(或CellMouseEnter) 事件来确定是否要 显示工具提示,如果是,请调用 工具提示的 方法
下面是一个例子:

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();
    }
}
请注意,我们没有使用CellToolTipTextRequired事件来设置DataGridViewCell的ToolTipText属性


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

您可以在DataGridView中使用常规工具提示控件,这将允许您使用工具提示的duration属性设置工具提示的显示时间

试试这个:

  • 向窗体中添加工具提示控件
  • 使用DGV的CellToolTipTextNeeded(或CellMouseEnter) 事件来确定是否要 显示工具提示,如果是,请调用 工具提示的 方法
下面是一个例子:

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();
    }
}
请注意,我们没有使用CellToolTipTextRequired事件来设置DataGridViewCell的ToolTipText属性


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

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

请参阅这篇有关使用工具提示的microsoft文章:


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

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

请参阅这篇有关使用工具提示的microsoft文章:


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

感谢您的回复。我应该在何处清除DGV列上的ToolTipText属性。我目前正在cellMouseEnter中执行此操作。我已经为DGV列定义了cellToolTipTextNeeded。我没有在单元格上看到工具提示。我猜,当我们获取/设置ToolTipText属性时,cellToolTipTextNeeded将被激发,对吗?@SupCSharp我假设您已经在WinForm designer中设置了列的ToolTipProperty属性。我只是想确保您根本没有使用该属性,因为您将使用标准的工具提示控件。CellToolTipTextRequired事件触发不是ToolTipText属性的函数,但在某些情况下它不会触发(请检查)。如果该事件没有为您触发,您可以将我的代码放入DGV的CellMouseEnter事件中,它应该可以工作。按ToolTipProperty,您是指ShowCellToolTips属性吗?如果是,我将其设置为true,并希望其他列的工具提示为true。我是否可以在DGV列上使用tooltip控件来增加延迟,并将ShowCellToolTIps设置为true?@SupCSharp否,我指的是属性,我相信它与您在原始问题中提到的cell.TooltipText相同。在我的方法中,设置ShowCellToolTips属性并不重要,因为您没有使用单元格工具提示,而是使用tooltip控件。您可以对一列使用tooltip控件,对其他列使用DataGridViewCell.ToolTipText属性;只需测试触发CellToolTipTextRequired(或CellMouseEnter)事件的列,并相应地设置工具提示和ToolTipText属性。我更新了我的例子来说明这一点。谢谢回复。我应该在何处清除DGV列上的ToolTipText属性。我目前正在cellMouseEnter中执行此操作。我已经为DGV列定义了cellToolTipTextNeeded。我没有在单元格上看到工具提示。我猜,当我们获取/设置ToolTipText属性时,cellToolTipTextNeeded将被激发,对吗?@SupCSharp我假设您已经在WinForm designer中设置了列的ToolTipProperty属性。我只是想确保您根本没有使用该属性,因为您将使用标准的工具提示控件。CellToolTipTextRequired事件触发不是ToolTipText属性的函数,但在某些情况下它不会触发(请检查)。如果该事件没有为您触发,您可以将我的代码放入DGV的CellMouseEnter事件中,它应该可以工作。按ToolTipProperty,您是指ShowCellToolTips属性吗?如果是,我将它设置为true,并且我希望它对于o的工具提示为true