Пытаюсь создать простое приложение на winforms, но замечаю пробел в моем понимании событий внутри модели winforms. Я знаю, что я довольно близок к решению, но есть несколько вещей, которые я не знаю, как сделать "путь winforms"
Вот макет пользовательского интерфейса того, что я пытаюсь выполнить sh. Form1 создается с помощью шаблона VS2019, но как LeftSide, так и RightSide - это два отдельных класса, которые я создал. текстовое поле и кнопка
имеют «дочерние» элементы управления, которые не отображаются (ie, сам класс отвечает за макет пользовательского интерфейса и проверку данных) требуют взаимодействия друг с другом и Form1 ни от чего не наследуются; они используются в Form1 через пространство имен создаются в Form1
Вот (неполная) Form1, idk, что добавить сюда
namespace myapp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
Здесь - это классы LeftSide и RightSide (обратите внимание, что они одинаковы, за исключением замены слова «left» на «right»)
namespace myapp.LeftSide
{
class LeftSide
{
private Panel LeftSide_Panel = new Panel();
private Textbox LeftSide_TextBox = new Textbox();
private Button LeftSide_Button = new Button();
private string LeftSide_Data; //store TextBox.text here
public ReturnPanel()
{
//return a Panel that Form1 can use
LeftSide_Panel.Controls.Add(LeftSide_Button);
LeftSide_Panel.Controls.Add(LeftSide_TextBox);
return this.LeftSide_Panel;
}
}
}
Я понимаю, что могу создать собственный обработчик событий для LeftSide_Button, создав внутри LeftSide, например:
private void LeftSide_Button_Click(object sender, EventArgs e)
{
//read the textbox, assume it is valid and store the string in our LeftSide_Data
this.LeftSide_Data = this.LeftSide_TextBox.Text;
}
Вышеупомянутое работает, если я хочу сохранить данные локальными для класса, но я не понимаю, как открыть LeftSide_Button_Click, в первую очередь, Form1, а иногда и RightSide.
Мои проблемы:
- , если LeftSide владеет данными , которые находятся внутри его текстового поля (и хранятся в LeftSide_Data), а LeftSide_Button_Click - мое настраиваемое событие проверки (проверка не показана выше для упрощения) как Form1 не только получает уведомление о том, что кнопка была нажата, но также отправляет строку, которая находится внутри LeftSide_D ata?
- как показать событие LeftSide всем, кто хочет подписаться? Это ключевое слово "делегат" или ключевое слово "событие"? или что-то другое? слишком много ключевых слов на основе событий и, следовательно, основной источник путаницы.
- следует изменить
private void LeftSide_Button_Click(object sender, EventArgs e)
с возврата void на private Eventhandler LeftSide_Button_Click(object sender, EventArgs e)
, и если да, то что я возвращаю ... что такое EventHandler " сделано из "?
EDIT: Я нашел следующую диаграмму, и, хотя она не передает данные вместе с событием, реализует ли это шаг в правильном направлении?" введите описание изображения здесь