[C#]Notifyicon.Text 突破 64 字元的限制
最近在寫程式時需要將一些資訊顯示在NotifyIcon上,才注意到NotifyIcon.Text有64個字元的限制。
在設定超過64個字元時,系統就會發出例外訊息。
經過一番的調整與精簡,仍是避免不了會超過64個字元。因此開始回思這64個字元是否是合理的限制,怎樣想都是怪怪的,為什麼是64?為什麼不是255?當然NotifyIcon的提示是不該太長,會影響使用者觀看,但是這個限制值也太Magic了,而且印象中也是有軟體顯示很多字元在上面。Google一下發現了How can I show a systray tooltip longer than 63 chars?這篇討論,裡面用了反射直接去設定未公開的NotifyIcon.text欄位,該問題就迎刃而解,所以這個值看起來是基於某些不為人知的原因而設的,底層並沒有這樣的限制。
public static void SetNotifyIconText(NotifyIcon ni, string text)
{
if (text.Length >= 128) throw new ArgumentOutOfRangeException("Text limited to 127 characters");
Type t = typeof(NotifyIcon);
BindingFlags hidden = BindingFlags.NonPublic | BindingFlags.Instance;
t.GetField("text", hidden).SetValue(ni, text);
if ((bool)t.GetField("added", hidden).GetValue(ni))
t.GetMethod("UpdateIcon", hidden).Invoke(ni, new object[] { true });
}
使用時將NotifyICon的物件實體與要設定的字串帶入即可。
private void button1_Click(object sender, EventArgs e)
{
SetNotifyIconText(notifyIcon1, new string('*', 100));
}
帶入後一切正常,突破了64字元的限制了...