簡體   English   中英

C#ContextMenuStrip在運行時分配

[英]C# ContextMenuStrip assign at runtime

C#-在我的應用程序中,我有三個單獨的contextSensitiveMenus

  1. popUpGuests
  2. popUpPeople
  3. popUpStatements

在運行時,我想根據某些條件選擇使用哪個popUp menu 我可以在網上找到很多有關在運行時創建contextSensitiveMenus ,但與從“預定義”菜單中進行選擇無關。

我一直在擺弄:​​txtText.ContextMenuStrip ...,但無法正常工作。

有任何想法嗎?

假設您在確定從哪個上下文菜單中選擇了哪個選項時遇到問題。

正如我在評論中提到的那樣,我將在此處發布一個有效的示例代碼,以使您更好地理解。

首先,您必須進行枚舉,以表示上下文菜單的所有可能菜單選項。 我們將使用它來唯一標記菜單選項。 (您可以通過簡單地標記一個string來避免這種情況,但是使用enum既簡單又干凈)

假設您有以下選擇。

    public enum contextMenuOptions
    {
        guestOption1,
        guestOption2,
        guestOption3,
        peopleOption1,
        peopleOption2,
        peopleOption3,
        statOption1,
        statOption2,
        statOption3
    }

在初始化“預定義”菜單選項時,您可以使用此枚舉標記它們,如下所示。 而且,您可以將創建的ContextMenuStrip設置為特定的TextBox

        ContextMenuStrip popUpGuest = new ContextMenuStrip();

        ToolStripTextBox guestMenuitem1 = new ToolStripTextBox();
        guestMenuitem1.Text = "Guest Option1";
        guestMenuitem1.Tag = contextMenuOptions.guestOption1; //tagging with enum
        guestMenuitem1.Click += Menuitem_Click;
        popUpGuest.Items.Add(guestMenuitem1);

        txtGuest.ContextMenuStrip = popUpGuest;

其他選項和其他上下文菜單的方法相同

        ContextMenuStrip popUpPeople = new ContextMenuStrip();
        ToolStripTextBox peopleMenuitem1 = new ToolStripTextBox();
        peopleMenuitem1.Text = "people option1";
        peopleMenuitem1.Tag = contextMenuOptions.peopleOption1;
        peopleMenuitem1.Click += Menuitem_Click;
        popUpPeople.Items.Add(peopleMenuitem1);
        txtPeople.ContextMenuStrip = popUpPeople;

        ContextMenuStrip popUpStatement = new ContextMenuStrip();
        ToolStripTextBox stateMenuitem1 = new ToolStripTextBox();
        stateMenuitem1.Text = "stat Option1";
        stateMenuitem1.Tag = contextMenuOptions.statOption1;
        stateMenuitem1.Click += Menuitem_Click;
        popUpStatement.Items.Add(stateMenuitem1);
        txtStatement.ContextMenuStrip = popUpStatement;

請注意,所有選項的單擊處理程序都是常見的Menuitem_Click ,因此,無論從哪個上下文菜單中選擇了哪個選項,都將調用此處理程序。 在這里,我們將提出一般解決方案。

    void Menuitem_Click(object sender, EventArgs e)
    {
        ToolStripTextBox senderMenuItem = (ToolStripTextBox)sender;
        contextMenuOptions tag = (contextMenuOptions)senderMenuItem.Tag;

        TextBox textBoxToBeUpdated = null;

        string optionSelected = "";
        switch (tag)
        {
            case contextMenuOptions.guestOption1:
                optionSelected = "guestOption1";
                textBoxToBeUpdated = txtGuest;
                break;
            case contextMenuOptions.guestOption2:
                optionSelected = "guestOption2";
                textBoxToBeUpdated = txtGuest;
                break;
            case contextMenuOptions.guestOption3:
                optionSelected = "guestOption3";
                textBoxToBeUpdated = txtGuest;
                break;
            case contextMenuOptions.peopleOption1:
                optionSelected = "PeopleOption1";
                textBoxToBeUpdated = txtPeople;
                break;
            case contextMenuOptions.statOption1:
                optionSelected = "StatmentOption1";
                textBoxToBeUpdated = txtStatement;
                break;
            default:
                break;
        }

        textBoxToBeUpdated.Text = optionSelected;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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