Crazymancolt45 Ответов: 1

Как узнать, была ли нажата кнопка в операторе if C#


Итак, я нахожусь в середине школьного проекта, и мне нужно выяснить, как исправить это утверждение if.
Что я сделал, так это сделал оператор if, который запускается комбинацией переключателя и обычной кнопки.
Вот мой код:

if (button1.Checked && button3.PerformClick())


это, кажется, не работает так, как я хочу. Если бы кто-то мог помочь, это было бы потрясающе!

Что я уже пробовал:

if (button1.Checked && button3.Click)

1 Ответов

Рейтинг:
5

Maciej Los

Если вы хотите знать, какая кнопка была нажата, вам нужно использовать sender объект. Я бы предложил создать только одно событие и ссылаться на него в каждой кнопке:

MyButton_Click(object sender, EventArgs e)
{
    //create an instance of button based on sender object
    Button btn = (Button)sender;
    //display the name of button and text in it
    MessageBox.Show($"You have clicked '{btn.Name}' with text= '{btn.Text}'")
}


Допустим, у вас есть 10 кнопок, так что результат может выглядеть так:
You have clicked 'button1' with text= 'go!'
You have clicked 'button5' with text= 'stop!'
You have clicked 'button10' with text= 'explore'


Для получения более подробной информации, пожалуйста, смотрите: Создание Обработчиков Событий - Windows Forms | Microsoft Docs[^]

[РЕДАКТИРОВАТЬ]
Вот полный учебник, Как создать пользовательский элемент управления для такого требования.

  1. Создайте новый проект Windows Form C# (имя: TwoClicks)
  2. Добавить новый элемент управления UserControl (название: UcConfirmedOption)
  3. Добавьте элементы управления: CheckBox (имя: CheckOption) и Button (имя: BtnConfirm, Visible=false).
  4. Добавьте приведенный ниже код к этому пользовательскому элементу управления
    using System;
    using System.Windows.Forms;
    
    namespace TwoClicks
    {
        public partial class UcConfirmedOption : UserControl
        {
            private string ot = "Option1";
            private bool buttonClicked = false;
    
            public UcConfirmedOption()
            {
                InitializeComponent();
            }
    
            public string OptionText
            {
                get => ot;
                set
                {
                    ot = value; 
                    OnOptionTextChanged();
                }
            }
    
            public bool IsOptionConfirmed
            {
                get => buttonClicked;
            }
    
            private void OnOptionTextChanged()
            {
                CheckOption.Text = ot;
            }
    
            private void BtnConfirm_Click(object sender, EventArgs e)
            {
                buttonClicked =  CheckOption.Checked;
                if (buttonClicked) BtnConfirm.Text = "Confirmed!";
            }
    
            private void CheckOption_CheckedChanged(object sender, EventArgs e)
            {
                this.BtnConfirm.Visible = CheckOption.Checked;
            }
        }
    }

    Теперь вам нужно привязать события к соответствующим элементам управления (используйте Poperty Inspector в правой нижней части окна Visual Studio).
  5. Компиляция проекта (это обязательная часть!)
  6. Добавьте пользовательские элементы управления в форму (один под другим) - 3 раза (назовите их: UcConfirmedOption1 - UcConfirmedOption3.
  7. Добавить кнопку (имя: BtnGetList, Text="получить список подтвержденных опций") и текстовое поле (Имя: TxtInfo, MulitLine=true)
  8. Вставьте код ниже:
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace TwoClicks
    {
        public partial class Form1 : Form
        {
            //create a list of confirmed options
            List<UcConfirmedOption> ucConfirmedOptions = new List<UcConfirmedOption>();
            public Form1()
            {
                InitializeComponent();
                //add user controls to list
                ucConfirmedOptions.Add(this.UcConfirmedOption1);
                ucConfirmedOptions.Add(this.UcConfirmedOption2);
                ucConfirmedOptions.Add(this.UcConfirmedOption3);
            }
    
            private void BtnGetList_Click(object sender, EventArgs e)
            {
                string result = string.Join(";", ucConfirmedOptions
                    .Where(x => x.IsOptionConfirmed)
                    .Select(x => string.Concat(x.Name, "=", x.OptionText))
                    .ToList());
                TxtInfo.Text = result;
            }
        }
    }

  9. Скомпилируйте проект и протестируйте его!


Вы можете скачать файлы проекта здесь[^].
Примечание: файл доступен для загрузки между 7:01 утра и 10:59 вечера UTC+2 (Варшавское время)

Скриншот: confirmedoption-тест.формат PNG (7.4 КБ)


CPallini

5.

Maciej Los

Спасибо, Карло.

Crazymancolt45

Так что я все еще немного сбит с толку. Причина, по которой я хочу знать, почему была нажата кнопка, находится в операторе if, если переключатель и кнопка были нажаты, то он будет отображать текст. Как я могу это сделать?

Maciej Los

Если я вас хорошо понимаю, у вас есть набор элементов управления: RadioButton + Button + TextBox (или Label). Они должны действовать как единый контроль. Их там очень много. Разве я не прав?
Пользователь должен изменить свойство radiobutton checked (true), а затем нажать на кнопку, чтобы увидеть какой-то текст. Какой текст вы хотите отобразить?

Crazymancolt45

Ну, это видеоигра, которую я делаю для классного проекта, и то, что я сделал, - это сделал новый переключатель для опций, который появляется после каждого выбора опции. Я действительно могу отправить вам весь проект по электронной почте. Никто, казалось, не помог мне с этим, так что было бы очень полезно, если бы кто-то мог. Я занимаюсь этим уже пару недель и до сих пор не починил его.

Maciej Los

Извините, но я не показываю свой адрес электронной почты ни в одном сообществе. Если вам нужна моя помощь, пожалуйста, отвечайте на мои вопросы.

Maciej Los

См. обновленный ответ.
[РЕДАКТИРОВАТЬ]
Проект: устранены незначительные ошибки и добавлены спецэффекты ;)
Чтобы изменить текст, отображаемый рядом с параметром, используйте свойство OptionText.