[英]Change delay time ToolTipText on ToolStripButton
應用程序在 c#/WinForm 中我正在使用帶有按鈕的 ToolStrip。
我設置了 ToolTipText,它正在工作。
我可以將延遲時間更改為更長的值嗎?
在其他控件中,我正在使用 ToolTip 控件並且它是可能的(AutoPopDelay 值)。
這是可能的,但並不像您期望的那樣簡單。
ToolStrip控件在具有內部 ToolTip 屬性時不公開 ToolTip 屬性。 此外,該控件不依賴於自動工具提示行為,而是在 Hover 事件上手動顯示工具提示。 這里的問題是 hover 事件也有一個依賴於內部定時器的自定義實現。
考慮到上述事實,您可以想象更改工具條的工具提示延遲的解決方案是多么的駭人聽聞,並且您決定是否值得,但這里是解決方案:
private void TestForm_Load(object sender, EventArgs e)
{
var mouseHoverTimerProperty =
toolStrip1.GetType().GetProperty("MouseHoverTimer",
BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(toolStrip1);
var mouseHoverTimerField =(System.Windows.Forms.Timer)
(mouseHoverTimerProperty.GetType().GetFields(
BindingFlags.NonPublic | BindingFlags.Instance)
.Where(x => x.FieldType == typeof(System.Windows.Forms.Timer)).First()
.GetValue(mouseHoverTimerProperty));
mouseHoverTimerField.Interval = 3000;
}
您看到我使用其類型而不是名稱找到私有字段的原因是因為“.NET Framework”實現中的字段名稱是“ mouseHoverTimer
”,而在“.NET (CORE/5/ 6)”是“ _mouseHoverTimer
”。 當我們依賴內部實現細節時,這就是問題所在,但有時這是不可避免的。
這是一種完全不同的方法,您幾乎應該始終避免使用,除非您知道您正在更改系統范圍的設置,而該設置不僅會影響您的應用程序。
正如我在另一個答案中提到的,有一個內部計時器負責 hover 時間以顯示工具提示,計時器的默認間隔是SystemInformation.MouseHoverTime的值。
您可以使用SystemParametersInfo更改該值。 此值是系統范圍的設置,如果您更改它,它將應用於依賴此值的所有應用程序。 也就是說,您決定是否要更改它,但這里是解決方案:
假設您創建了以下幫助程序 class:
using System.Runtime.InteropServices;
public static class SystemInformationExtensions
{
private const int SPI_SETMOUSEHOVERTIME = 0x0067;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool SystemParametersInfo(
int nAction, int nParam, ref int value, int ignore);
public static void SetMouseHoverTime(int milliseconds)
{
SystemParametersInfo(SPI_SETMOUSEHOVERTIME,
milliseconds, ref milliseconds,0);
}
}
然后你可以像這樣使用它:
private void TestForm_Load(object sender, EventArgs e)
{
SystemInformationExtensions.SetMouseHoverTime(3000);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.