2011-04-19 66 views
0

我在C#中有一個綁定datagridview的Windows窗體應用程序。我正在尋找一種方法來增加特定列的單元格的工具提示持續時間。工具提示通過設置cell.TooltipText屬性在CellMouseEnter處理程序中設置。從我在互聯網上做的研究來看,似乎我應該有一個外部工具提示對象來增加延遲。但是,對此,ShowCellToolTips應該設置爲false。我需要將ShowCellToolTips設置爲true,因爲cell.ToolTipText正在爲其他各種函數中的其他列單元格設置。有沒有辦法繞過默認的cell.ToolTipText屬性的特定列的單元格,並有外部工具提示對象顯示工具提示?我們的目標是讓ShowCellToolTips設置爲true,並增加工具提示的延遲時間,或者讓用戶控制關閉工具提示。有沒有辦法做到這一點?任何幫助將非常感激。謝謝。如何覆蓋C#datagridview的默認工具提示行爲以增加特定單元格的工具提示延遲

回答

4

您可以在DataGridView中使用常規的ToolTip控件,該控件允許您使用ToolTip的duration屬性來設置ToolTip顯示的時間量。

試試這個:

  • 添加工具提示控件到窗體
  • 使用您DGV的CellToolTipTextNeeded(或CellMouseEnter) 事件,以確定是否要 顯示您的工具提示,如果這樣稱呼 工具提示的ToolTip.Show 方法。

下面是一個例子:我們不使用CellToolTipTextNeeded事件設置的DataGridViewCell的ToolTipText屬性

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(); 
    } 
} 

通知。

使用ToolTip控件的一個優點是您可以通過ToolTip控件的屬性自定義您的ToolTip的外觀和行爲。

+0

感謝您的回覆。我應該在哪裏清除DGV列上的ToolTipText屬性。我目前正在cellMouseEnter中做這件事,並且我已經爲DGV列定義了cellToolTipTextNeeded。我沒有看到單元格上出現工具提示。猜猜,當我們獲取/設置ToolTipText屬性時,cellToolTipTextNeeded會被觸發,對吧? – SupCSharp 2011-04-19 17:27:03

+0

@SupCSharp我假設你在WinForm設計器中設置了列的ToolTipProperty屬性。我只是想確保你沒有使用該屬性,因爲你會使用標準的ToolTip控件_instead_。 CellToolTipTextNeeded事件觸發不是ToolTipText屬性的函數,但有些情況下它不會觸發(檢查[docs](http://msdn.microsoft.com/zh-cn/library/system.windows)。 forms.datagridview.celltooltiptextneeded.aspx))。如果該事件不適合您,您可以將我的代碼放到DGV的CellMouseEnter事件中,它應該可以工作。 – 2011-04-19 20:14:34

+0

通過ToolTipProperty,你是指ShowCellToolTips屬性?如果是,我將它設置爲true,我希望它對於其他列的工具提示是正確的。我是否可以在DGV列上使用工具提示控件,在那裏我想增加延遲,並將ShowCellToolTIps設置爲true? – SupCSharp 2011-04-20 15:07:50