@missbells

Как передать нажатую кнопку в другой метод C#?

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

public void TakeMessage(string btnStatus, string userName)
        {


            if (userName == "")
            {
                MessageBox.Show("Введите Ваше имя!");
            }

            else if (btnStatus == "Red")
            {
                btnTest.BackColor = Color.Green;
                btnTest.Text = "Свободно";
            }
            else
            {
                btnTest.BackColor = Color.Red;
                btnTest.Text = userName;
            }
        }

        
        private void btnClick(object sender, EventArgs e)
        {
            Control btn = (Control)sender;

            if (btn.BackColor == Color.Green)
            {
                btnStatus = "Green";
            }

            else
            {
                btnStatus = "Red";
            }

            Server.SendMessageToAll(btnStatus, tbLogin.Text);
            TakeMessage(btnStatus, tbLogin.Text);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (var button in Controls.OfType<Button>())
            {
                button.Click += btnClick;
            }
        }
  • Вопрос задан
  • 2257 просмотров
Пригласить эксперта
Ответы на вопрос 3
Используйте делегат.
Ответ написан
Комментировать
dmitry_pavlov
@dmitry_pavlov
World-class .NET freelance contractor (remotely)
Параметр sender это и есть кнопка, которая была нажата. Передайте ее третьим параметром в TakeMessage, предварительно скастив к типу кнопки, например.
Ответ написан
tomnolane
@tomnolane
профессиональный разработчик
public void TakeMessage(string btnStatus, string userName, Button btnTest)
        {


            if (userName == "")
            {
                MessageBox.Show("Введите Ваше имя!");
            }

            else if (btnStatus == "Red")
            {
                btnTest.BackColor = Color.Green;
                btnTest.Text = "Свободно";
            }
            else
            {
                btnTest.BackColor = Color.Red;
                btnTest.Text = userName;
            }
        }

private void btnClick(object sender, EventArgs e)
        {
            var btn = sender as Button; 

            if (btn.BackColor == Color.Green)
            {
                btnStatus = "Green";
            }

            else
            {
                btnStatus = "Red";
            }

            Server.SendMessageToAll(btnStatus, tbLogin.Text);
            TakeMessage(btnStatus, tbLogin.Text, btn);
        }


в вашем случае не вижу смысла создавать отдельный метод TakeMessage ... все что есть в TakeMessage, можно реализовать в одном методе обработчике: btnClick
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы