[英]How to properly refresh Context menu strip
我目前正試圖弄清楚如何正確刷新上下文菜單條。 我嘗試了幾種不同的方法,但都沒有用。 基本概念非常簡單。 托盤應用程序顯示一個上下文菜單條,允許您啟動服務或停止它(如果它已經在運行)。 它應該每隔幾秒更新或刷新一次以檢查狀態,然后相應地顯示項目。 現在我似乎無法讓它正確刷新,我需要一些指導。
這是Main
方法
static void Main(string[] args)
{
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
NotifyIcon trayicon = new NotifyIcon();
trayicon.ContextMenuStrip = GetContext();
trayicon.Icon = Properties.Resources.icon_error;
trayicon.Visible = true;
trayicon.Text = trayballoon;
LoadSettings();
Application.Run();
}
上下文菜單如下
static ContextMenuStrip GetContext()
{
ContextMenuStrip CMS = new ContextMenuStrip();
if (getStatus() == "Running")
{
CMS.Items.Add("Pause", null, new EventHandler(Stop_Click));
CMS.Items.Add("Stop", null, new EventHandler(Stop_Click));
}
else
{
CMS.Items.Add("Start", null, new EventHandler(Start_Click));
}
CMS.Items.Add("Set Automatic", null, new EventHandler(Auto_Click));
CMS.Items.Add("Set Manual", null, new EventHandler(Manual_Click));
CMS.Items.Add("Exit", null, new EventHandler(Exit_Click));
return CMS;
}
我不確定在哪里放置刷新或如何訪問它,假設它是CMS.Refresh()
但除非在 main 方法中調用它,否則不會更新。 任何見解表示贊賞!
我不建議不斷刷新上下文條。 相反,只顯示和隱藏您需要的項目要干凈得多。 ToolStripItemCollection.Add
方法返回對新添加按鈕的引用,因此您可以只存儲這些引用供以后使用。 然后使用ToolStripItem.Visible
屬性根據需要顯示/隱藏它們。 例如:
// Somewhere to keep references to the buttons you need to modify
private static ToolStripItem _stopButton;
private static ToolStripItem _startButton;
private static ToolStripItem _pauseButton;
static ContextMenuStrip GetContext()
{
ContextMenuStrip CMS = new ContextMenuStrip();
// Store references to the buttons
_pauseButton = CMS.Items.Add("Pause", null, new EventHandler(Stop_Click));
_stopButton = CMS.Items.Add("Stop", null, new EventHandler(Stop_Click));
_startButton = CMS.Items.Add("Start", null, new EventHandler(Start_Click));
CMS.Items.Add("Set Automatic", null, new EventHandler(Auto_Click));
CMS.Items.Add("Set Manual", null, new EventHandler(Manual_Click));
CMS.Items.Add("Exit", null, new EventHandler(Exit_Click));
return CMS;
}
然后在您更改應用程序狀態的方法中,例如:
public void SetButtonStatus(bool running)
{
// Only show this when not running
_startButton.Visible = !running;
_stopButton.Visible = running;
_pauseButton .Visible = running;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.