2013-07-26 34 views
1

我們需要使用內置的WinForms提示控制,爲我們的控件顯示一個很長的提示(約4000字)非常緩慢。但是,如果我們這樣做了,當我們將鼠標指針放入目標控件以查看提示時,表單會凍結一兩分鐘。之後沒有任何反應。工具提示適用於長文(2000+字符)

我們嘗試和檢測標準的提示開始工作非常慢,當它有大約2000個字符,而當我們增加字符的數量的情況變得更糟。這是一個已知問題,是否有任何解決方法?請不要建議修剪提示文本 - 我們需要按原樣顯示字符串。

+0

我試圖顯示與超過4500個字符的提示,並立即顯示,沒有凍結。你能發表一些代碼來重現問題嗎? – endofzero

+0

@endofzero,創建一個全新的WinForms項目。將複選框和工具提示控件放置在窗體上。添加一個類似'toolTip1.SetToolTip(checkBox1,「foooooo ...」)'這樣的語句,將很長的文本添加到表單的加載事件中。啓動它並將鼠標指針放在複選框內。測試環境:Win7 x64,.NET 4.0,VS 2010. – TecMan

回答

1

當您指定的文本字符串爲ToolTip,繪製它的過程中涉及到USP10.dll它處理在屏幕上的字符的Unicode佈局呼叫。當程序凍結時,我可以通過查看堆棧跟蹤來看到這一點。這種佈局的表現對長字符串來說很糟糕。

爲應用程序禁用視覺樣式(註釋掉EnableVisualStyles())解決了問題 - 即時顯示工具提示,但這不是最佳解決方案。

我一直在尋找,發現this page這表明該問題可能與長串的佈局,其中自動換行是必要的。通過在工具提示文本中插入換行符,我發現該字符串立即顯示。因此,如果您可以確定手動插入換行符的位置,則應快速顯示ToolTip

0

怎麼樣使用其他工具提示,即HtmlToolip

+0

我們不需要這個擴展的HTML渲染功能。我們需要的僅僅是將純文本顯示爲提示。而另一個可能不受支持的第三方庫的使用是爲自己的項目添加潛在問題的一個步驟:) – TecMan