Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Передать sender в обработчик


Автор: ДобренькийПапаша 6.5.2010, 08:17
У меня есть три toolStripMenuItem (Button). Одновременно может быть нажат только один из них. Завёл переменную для текущей выбранной кнопки и написал такой код в обработчике:

Код

private void PeriodtoolStripButton_CheckedChanged(object sender, EventArgs e)
        {
            if (currentButtonChoosed.Checked == false)
            {
                return;
            }
            currentButtonChoosed.Checked = false;
            currentButtonChoosed = (ToolStripButton) sender;
        }


И это работает)))

Я продублировал эти кнопки в стандартном ниспадающем MenuItemStrip. И написал такой код:

Код

 private void h1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PeriodtoolStripButton_CheckedChanged(H1toolStripButton, new EventArgs());
        }
        private void h3ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PeriodtoolStripButton_CheckedChanged(H3toolStripButton, new EventArgs());
        }
        private void d1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PeriodtoolStripButton_CheckedChanged(DtoolStripButton, new EventArgs());
        }


Так передавать неправильно  как я понял, поскольку это работает некорректно.

Как правильно?

Автор: KelTron 6.5.2010, 09:53
Почему бы ко всем кнопкам не привязать один обработчик, например такой:
Код

private void toolStripMenuItem_Click(object sender, EventArgs e)
        {
            h1ToolStripMenuItem.Checked = false;
            h3ToolStripMenuItem.Checked = false;
            d1ToolStripMenuItem.Checked = false;

            ((ToolStripButton)sender).Checked = true;       
        }

Автор: ДобренькийПапаша 6.5.2010, 10:18
Ок, спасибо. А почему не работает так как у меня?)))

Автор: KelTron 6.5.2010, 16:31
Что то метод PeriodtoolStripButton_CheckedChanged не внушает доверия..)

Автор: ДобренькийПапаша 9.5.2010, 10:33
Кстати вы не так поняли мой вопрос.
Ситуация такая:
В программе с SDI интерфейсом есть объект ToolStrip, содержащий три tooStripButton со свойством CheckOnClick=true; Нужно обеспечить, чтобы одновременно мог быть выбран только один toolStripButton.
Реализовал так (это работает корректно):
Код

private void LinestoolStripButton_CheckedChanged(object sender, EventArgs e)
       {
           //currentChartType хранит текущую выбранную кнопку
           if (currentChartType.Checked == false)
           {
               return;
           }
           currentChartType.Checked = false;
           currentChartType = (ToolStripButton)sender;
       }


Мне нужно продублировать эти кнопки в MenuStrip. Продублировал. И повесил на них такой код:
Код

private void линияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LinestoolStripButton_CheckedChanged(LinestoolStripButton, new EventArgs());
        }
        private void барыToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LinestoolStripButton_CheckedChanged(StocktoolStripButton, new EventArgs());
        }
        private void свечиToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LinestoolStripButton_CheckedChanged(CandletoolStripButton, new EventArgs());
        }



Однако это работает некорректно. Как правильно продублировать?

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