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

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

1 Ответ

1 голос
/ 05 апреля 2019

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

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

Все формы 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...