Создание элемента группы в верхнем меню - PullRequest
0 голосов
/ 18 декабря 2018

Мне нужно сделать выбор БД в верхнем меню в моем приложении winform.Я нашел, как поместить проверенное состояние во время разработки, но не могу снять его во время выполнения.

enter image description here

Моя задача еще сложнее.Мне нужно Original и Test действовать как группа.Когда первый проверяется, второй не проверяется и наоборот.Я планирую достичь этого с помощью CheckedChanged событий:

    private void testToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
    {
        originalToolStripMenuItem.Checked = !testToolStripMenuItem.Checked ;
    }

    private void originalToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
    {

        testToolStripMenuItem.Checked = !originalToolStripMenuItem.Checked;

    }

Есть ли более изящные способы достичь этого?

1 Ответ

0 голосов
/ 18 декабря 2018

Ответ, основанный на этой статье , написанной Родом Стивенсом

Если вы не планируете добавлять больше БД в свое меню, проблем с этим не возникает.

Если вы планируете добавить X BD в свое меню, вы можете хранить все элементы меню в List<ToolStripMenuItem> и использовать этот список для динамической проверки / снятия отметки с элементов.

Например, я разработал эту превосходную форму:

enter image description here

I не установил с помощью конструктора никаких событий для этих элементов (правильно названных: test1ToolStripMenuItem в test4ToolStripMenuItem)

В классе формы я сохранил список элементов меню в списке с именем DBs и добавил в событие click тот же метод:

private List<ToolStripMenuItem> DBs;

private void Form1_Load(object sender, EventArgs e)
{
    DBs = new List<ToolStripMenuItem>
    {
        test1ToolStripMenuItem,
        test2ToolStripMenuItem,
        test3ToolStripMenuItem,
        test4ToolStripMenuItem
    };

    foreach (var DB in DBs)
    {
        DB.Click += FakeRadioBehaviour;
    }
}

МетодFakeRadioBehaviour будет перебирать список MenuItem, проверять object sender, которые соответствуют определенному элементу списка, и снимать флажки с других:

private void FakeRadioBehaviour(object sender, EventArgs e)
{
    foreach (var DB in DBs)
    {
        //Checks the sender, unchecks all others ones.
        DB.Checked = ((sender as ToolStripMenuItem) == DB);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...