簡體   English   中英

如何正確刷新上下文菜單條

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM