Включить кнопку при нажатии - PullRequest
2 голосов
/ 07 мая 2019

У меня есть 4 кнопки, и я хочу отключить их, если на кого-то нажата

Примечание: одновременно можно отключить только одну

Так что моя логика выглядит так:

В btn1 Событие щелчка, которое я выполняю:

btn1.Enabled = false;
btn2.Enabled = true;
btn3.Enabled = true;
btn4.Enabled = true;

В btn2 Событие щелчка:

btn1.Enabled = true;
btn2.Enabled = false;
btn3.Enabled = true;
btn4.Enabled = true;

И то же самое для других 2 кнопок.Когда я вижу этот код, он мне не очень нравится.Есть ли способ сделать что-то более читаемое и короткое, чтобы сделать этот тип действий

Ответы [ 4 ]

3 голосов
/ 07 мая 2019

Вот еще одна идея для вас - вы можете иметь один обработчик для всех кнопок, как это:

enter image description here

Ваш код станет очень простым:

using System;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btn_click(object sender, EventArgs e)
        {
            button1.Enabled = true;
            button2.Enabled = true;
            button3.Enabled = true;
            button4.Enabled = true;

            Button btn = sender as Button;
            if (btn != null)
            {
                btn.Enabled = false;
            }
        }
    }
}

Надеюсь, это поможет 101

3 голосов
/ 07 мая 2019

Вместо того, чтобы писать много кода, гораздо проще использовать группу RadioButton и установить для свойства Appearance значение Button.

Как показывают документы, это дает переключателям вид кнопки Windows.

1 голос
/ 07 мая 2019

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

  public partial class Form1 : Form
    {
        // Control the buttons.
        List<Button> buttons = new List<Button>();

        public Form1()
        {
            InitializeComponent();

            buttons.Add(this.button1);
            buttons.Add(this.button2);
            buttons.Add(this.button3);
            buttons.Add(this.button4);
        }

        private void Button_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            foreach (var b in buttons)
            {
                if (button.Text.Equals(b.Text))
                {
                    b.Enabled = false;
                }
                else
                {
                    b.Enabled = true;
                }
            }
        }
    }
0 голосов
/ 07 мая 2019
private void btn_Click(object sender, EventArgs e)
{
    foreach(Button btn in Controls.OfType<Button>())
        btn.Enabled = true;
    Button button = sender as Button;
    button.Enabled = false;
}

Не забудьте использовать System.Linq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...