Как использовать интерфейс или класс для группировки общих событий пользовательского интерфейса в одном месте?

Есть ли способ собрать все общие события пользовательского интерфейса в одном файле. Вот что у меня есть У меня есть различные пользовательские формы, в которых говорят, что у меня есть кнопка закрытия, которая закрывает форму. Поэтому вместо того, чтобы писать событие в каждой форме, закрыть. У этого кода может быть интерфейс или что-то еще, и мы просто ссылаемся на него в соответствующей форме.

С какой системой пользовательского интерфейса вы работаете? WinForms? ВПФ? Что-то более экзотическое из линейки Xamarin?

Damien_The_Unbeliever 05.04.2019 08:10

Что вы уже пробовали? А также в какой UI Framework вы работаете (WinForms, WPF, UWP...)? Поскольку вопрос стоит прямо сейчас, он слишком широк

MindSwipe 05.04.2019 08:11

MVC, MVVM, ReactiveUI. Найдите их. Вы всегда должны определять фреймворк, который вы используете, иначе кому-либо будет трудно даже предложить что-то, что имеет смысл. В любом случае, вам не нужно использовать какой-то определенный готовый шаблон. Вы можете построить его с помощью стандартных инструментов. Вам просто нужно несколько разумно структурированных классов поддержки.

Jimi 05.04.2019 08:13

Я использую приложение Winform

Sam K 05.04.2019 08:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Однако для вашего примера кнопки закрытия (почему ваши формы нуждаются в одной сверх стандартной в строке заголовка?), вы могли бы использовать наследование.

Все формы WinForms происходят от Form. Но они не обязательно должны быть напрямую производными от Form. Таким образом, вы можете создать форму «шаблон», содержащую все ваши общие элементы управления, с соответствующим позиционированием и т. д.

Затем, когда вы создаете новую форму, вы заходите в ее код и меняете

public partial class NewForm : Form

к

public partial class NewForm : TemplateForm

Единственная небольшая неприятность заключается в том, что вам нужно перекомпилировать после каждого изменения шаблона, если вы хотите, чтобы дизайнер для производных форм правильно отображал обновленные макеты.


Создайте новое приложение Windows Forms. Я выбрал C#, .NET Framework, VS 2019.

На Form1 добавьте кнопку. В этом событии клика есть:

private void Button1_Click(object sender, EventArgs e)
{
  MessageBox.Show("Hello");
}

Сохраните изменения, соберите проект.

Теперь добавьте Form2 к проекту. Выберите «Просмотреть код» и отредактируйте строку объявления:

public partial class Form2 : Form1

Отредактируйте Program.cs, чтобы сделать Form2 стартовой формой:

static void Main()
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new Form2());
}

Запустите программу. Вы увидите, что он Form2 работает, но у него есть кнопка от Form1, и когда вы нажимаете кнопку, вы получаете сообщение Hello.

Спасибо, Дэмиен! Вы имеете в виду иметь TemplateForm как отдельную форму и определять в ней события? Извините, я не совсем понимаю. У вас есть пример кода?

Sam K 05.04.2019 08:29

@SamK - я добавил ссылку из наследства на одну из страниц документации, но да, у вас есть отдельная форма, которая может содержать элементы управления. Он также может содержать обработчики событий и т. д., но не имеют. Это выбор, который вы можете сделать. Например, вы можете даже смешивать и сочетать — некоторые элементы управления в шаблоне имеют обработчики событий в шаблоне, некоторые должны иметь обработчики, предоставляемые формой, использующей шаблон, некоторые могут быть необязательными и т. д.

Damien_The_Unbeliever 05.04.2019 08:31

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

Sam K 05.04.2019 08:36

@SamK - добавлено быстрое и грязное пошаговое руководство по настройке в новом проекте.

Damien_The_Unbeliever 05.04.2019 08:36

@SamK- нет, пользовательский элемент управления был опцией один. Другой вариант — наследование, и я бы порекомендовал его здесь для кнопки закрытия.

Damien_The_Unbeliever 05.04.2019 08:36

Спасибо за пример, попробую и отпишусь

Sam K 05.04.2019 08:38

Другие вопросы по теме