Есть ли способ собрать все общие события пользовательского интерфейса в одном файле. Вот что у меня есть У меня есть различные пользовательские формы, в которых говорят, что у меня есть кнопка закрытия, которая закрывает форму. Поэтому вместо того, чтобы писать событие в каждой форме, закрыть. У этого кода может быть интерфейс или что-то еще, и мы просто ссылаемся на него в соответствующей форме.
Что вы уже пробовали? А также в какой UI Framework вы работаете (WinForms, WPF, UWP...)? Поскольку вопрос стоит прямо сейчас, он слишком широк
MVC, MVVM, ReactiveUI. Найдите их. Вы всегда должны определять фреймворк, который вы используете, иначе кому-либо будет трудно даже предложить что-то, что имеет смысл. В любом случае, вам не нужно использовать какой-то определенный готовый шаблон. Вы можете построить его с помощью стандартных инструментов. Вам просто нужно несколько разумно структурированных классов поддержки.
Я использую приложение Winform
Для группы элементов управления, которые являются сплоченными и работают вместе как группа, я бы предложил создать пользовательский контроль.
Однако для вашего примера кнопки закрытия (почему ваши формы нуждаются в одной сверх стандартной в строке заголовка?), вы могли бы использовать наследование.
Все формы 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 как отдельную форму и определять в ней события? Извините, я не совсем понимаю. У вас есть пример кода?
@SamK - я добавил ссылку из наследства на одну из страниц документации, но да, у вас есть отдельная форма, которая может содержать элементы управления. Он также может содержать обработчики событий и т. д., но не имеют. Это выбор, который вы можете сделать. Например, вы можете даже смешивать и сочетать — некоторые элементы управления в шаблоне имеют обработчики событий в шаблоне, некоторые должны иметь обработчики, предоставляемые формой, использующей шаблон, некоторые могут быть необязательными и т. д.
Если я правильно понял, мне нужно создать пользовательский элемент управления и динамически создавать элементы управления и размещать их во время выполнения.
@SamK - добавлено быстрое и грязное пошаговое руководство по настройке в новом проекте.
@SamK- нет, пользовательский элемент управления был опцией один. Другой вариант — наследование, и я бы порекомендовал его здесь для кнопки закрытия.
Спасибо за пример, попробую и отпишусь
С какой системой пользовательского интерфейса вы работаете? WinForms? ВПФ? Что-то более экзотическое из линейки Xamarin?