C # ContextMenuStrip назначить во время выполнения - PullRequest
0 голосов
/ 25 апреля 2018

C # - в моем приложении у меня есть три отдельных contextSensitiveMenus

  1. popUpGasts
  2. popUpPeople
  3. popUpStatements

Во время выполнения я хочу выбрать, какой popUp menu используется в зависимости от определенных условий. Я могу найти много онлайн о создании contextSensitiveMenus во время выполнения, но ничего о выборе из «предопределенных» меню.

Я возился с: txtText.ContextMenuStrip ... но не могу его получить на работу.

Есть идеи?

1 Ответ

0 голосов
/ 25 апреля 2018

Предполагается, что у вас есть проблема с выбором опции, выбранной из контекстного меню.

Как я уже упоминал в комментарии, я публикую здесь пример рабочего кода для вашего лучшего понимания.

Сначала вы должны сделать перечисление, представляющее все возможные пункты меню вашего контекстного меню. Мы будем использовать его для уникальной пометки пунктов меню. (Вы можете избежать этого, просто пометив 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...