Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > switch(?????????)


Автор: Berserk 12.1.2007, 12:08
Есть ToolStrip, имеются также  ToolStripMenuItems. Есть button, Ок которая.
При нажатии на кнопку необходимо, чтоб делалось опредаленное событие. Можно конечно создать несколько кнопок Ок, но это если  ...MenuItems несколько, а если их много, то не выход получается.
При каждом  выборе ...MenuItems выполняется только одно действие.
Так что можно поставить на месте вопросов, чтоб в case ставить один из пунктов ...MenuItems???


Код

private void buttonOK_Click(object sender, EventArgs e)
        {
            switch (???????????????)
            {
                case ToolStripMenuItem1:
                         .......
                         break;
                 ........

            }
        }

Автор: ivashkanet 12.1.2007, 12:38
Berserk, что-то не понятно smile

Ты выбираешь item из меню, а потом нажимаешь на ok и хочешь выполнить команду, которая соответсвует выбранному айтему?

Но этого нельзя сделать, меню айтем не запоминает, что на него нажали. Он может только среагировать на нажатие на него  smile 

Сделай общий обработчик для нажатий на разные пункты меню:
Код

private void ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // проверяем действительно ли кликнули на ToolStripMenuItem
            if (sender is ToolStripMenuItem)
            {
                // получаем экземпляр айтема, на который кликнули
                ToolStripMenuItem menuItem = sender as ToolStripMenuItem;

                switch (menuItem)
                {
                       case ToolStripMenuItem1:
                         .......
                         break;
                       ........
                }
            }
        }

и будет тебе счастье smile

Автор: Berserk 12.1.2007, 13:06
Возможно я не все дорассказал. При выборе ...MenuItem'а появляются определенные листбоксы, комбобоксы и еще куча всего. Поклацав по боксам и не боксам,  получаем определенные данные. Но дело в том, что от того какой   ...MenuItem мы нажмем зависит то, что появиться на форме. А кнопка Ок всегда будет одна и таже. Я думаю мне это пойдет. Можно даже и без if скорее всего. Попробую smile 

спасибо smile  


Попробовал  smile . Чего-то не хочет. Выдает ошибку:
A value of an integral type expected(Значение ожидаемого целого типа)
Код

switch (menuItem) //подчеркивает menuItem

 smile 

Автор: marcusmae 12.1.2007, 15:31
по-моему, так

Код

switch (menuItem) //подчеркивает menuItem


нельзя делать. Под свичом могут быть только интегральные типы : sbyte, byte, short, ushort, int, uint, long, ulong, char, string или enum-type.

Автор: maxim1000 12.1.2007, 15:49
можно сделать так: привязать каким-либо образом интегральное значение к каждому пункту меню, а уже его ставить в switch

иногда подобные объекты сами предоставляют эту возможность, а можно завести что-нибудь отдельное для хранения соответствий (в C++ подошёл бы std::map, думаю и здесь что-то найдётся)

P.S.
ну а потом уже можно и от switch'а перейти к полиморфизму, но это зависит от масштабов кода в switch'е...

Автор: ivashkanet 12.1.2007, 16:42
Цитата(Berserk @  12.1.2007,  12:06 Найти цитируемый пост)
. Чего-то не хочет. Выдает ошибку:

Ах лопух, я лопух  smile  smile 

Цитата(maxim1000 @  12.1.2007,  14:49 Найти цитируемый пост)
можно сделать так: привязать каким-либо образом интегральное значение к каждому пункту меню, а уже его ставить в switch

Ага:
Код

switch (menuItem.Name)
                switch (menuItem.Name)
                {
                    case "Имя 1":
                        break;
                    case "Имя 2":
                        break
                }


Вместо Name можно использовать Text (надпись на айтеме)

Добавлено @ 16:43 
Цитата(maxim1000 @  12.1.2007,  14:49 Найти цитируемый пост)
ну а потом уже можно и от switch'а перейти к полиморфизму, но это зависит от масштабов кода в switch'е...

Не пугай новичков страшными словами  smile  smile  smile 

Автор: maxim1000 12.1.2007, 16:49
Цитата(ivashkanet @  12.1.2007,  15:42 Найти цитируемый пост)
Вместо Name можно использовать Text (надпись на айтеме)

а строки можно?

Автор: ivashkanet 12.1.2007, 17:04
Цитата(maxim1000 @  12.1.2007,  15:49 Найти цитируемый пост)
а строки можно?

Константные -- да.
Я компилировал  smile 

Автор: Berserk 15.1.2007, 09:05
Все получается без проблем. smile . 
smile 
Как говарится:
"Учи мат. часть smile "
Буду учить. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)