Рейтинг:
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[
^]
[РЕДАКТИРОВАТЬ]
Вот полный учебник, Как создать пользовательский элемент управления для такого требования.
- Создайте новый проект Windows Form C# (имя: TwoClicks)
- Добавить новый элемент управления UserControl (название: UcConfirmedOption)
- Добавьте элементы управления: CheckBox (имя: CheckOption) и Button (имя: BtnConfirm, Visible=false).
- Добавьте приведенный ниже код к этому пользовательскому элементу управления
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).
- Компиляция проекта (это обязательная часть!)
- Добавьте пользовательские элементы управления в форму (один под другим) - 3 раза (назовите их: UcConfirmedOption1 - UcConfirmedOption3.
- Добавить кнопку (имя: BtnGetList, Text="получить список подтвержденных опций") и текстовое поле (Имя: TxtInfo, MulitLine=true)
- Вставьте код ниже:
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;
}
}
}
- Скомпилируйте проект и протестируйте его!
Вы можете скачать файлы проекта
здесь[
^].
Примечание: файл доступен для загрузки между 7:01 утра и 10:59 вечера UTC+2 (Варшавское время)
Скриншот:
confirmedoption-тест.формат PNG (7.4 КБ)
Maciej Los
Спасибо, Карло.
Crazymancolt45
Так что я все еще немного сбит с толку. Причина, по которой я хочу знать, почему была нажата кнопка, находится в операторе if, если переключатель и кнопка были нажаты, то он будет отображать текст. Как я могу это сделать?
Maciej Los
Если я вас хорошо понимаю, у вас есть набор элементов управления: RadioButton + Button + TextBox (или Label). Они должны действовать как единый контроль. Их там очень много. Разве я не прав?
Пользователь должен изменить свойство radiobutton checked (true), а затем нажать на кнопку, чтобы увидеть какой-то текст. Какой текст вы хотите отобразить?
Crazymancolt45
Ну, это видеоигра, которую я делаю для классного проекта, и то, что я сделал, - это сделал новый переключатель для опций, который появляется после каждого выбора опции. Я действительно могу отправить вам весь проект по электронной почте. Никто, казалось, не помог мне с этим, так что было бы очень полезно, если бы кто-то мог. Я занимаюсь этим уже пару недель и до сих пор не починил его.
Maciej Los
Извините, но я не показываю свой адрес электронной почты ни в одном сообществе. Если вам нужна моя помощь, пожалуйста, отвечайте на мои вопросы.
Maciej Los
См. обновленный ответ.
[РЕДАКТИРОВАТЬ]
Проект: устранены незначительные ошибки и добавлены спецэффекты ;)
Чтобы изменить текст, отображаемый рядом с параметром, используйте свойство OptionText.