Это вопрос «Хорошего программирования», чтобы избежать необходимости вырезать и вставлять код. Наставник по программированию однажды сказал мне, что если вы вырезаете и вставляете код, вы, вероятно, ошибаетесь. У меня есть приложение форм Windows C#, которое содержит полдюжины экранов ввода данных. Я реализую функциональность, чтобы подтвердить отмена изменений, если пользователь нажимает кнопку отмены, когда форма имеет изменения, внесенные в элементы управления вводом данных. Я не хочу вырезать и вставлять этот код в каждый метод button_Cancel_Click.Как переместить метод кнопки отмены в отдельный класс
Я уже перевел вопрос «Are You Sure» в отдельный класс, но если я попытаюсь закрыть форму из другого класса, компилятор жалуется, что не знает, что такое «this» в «this.Close()» ссылаясь на.
Или это так хорошо, как оно есть, и я должен просто дублировать код? Заранее спасибо Дэвид
private void buttonCancel_Click(object sender, EventArgs e)
{
// Check and warn users of changes to the data before close.
if (dataChanged)
{
bool discardChanges = CancelForm.AreYouSure();
if (discardChanges)
{
this.Close();
}
}
else
{
this.Close();
}
}
Я предлагаю, используя * абстрактный * базовый класс, унаследованный от '' form' с кнопкой Cancel', 'buttonCancel_Click method'' DataChanged' собственность и т.д. При реализации форма просто наследует от базового класса. –
Я бы предложил использовать либо функцию, которая обрабатывает логику: «if (ValidateChangesMade (dataChanged)) { this.Close(); } 'или добавление логики в класс CancelForm: 'if (CancelForm.ValidateChangesMade (dataChanged)) { this.Close(); } ' – MrApnea
Хотя это действительно зависит от вас, то, что я обычно делаю, максимально подходит логике MVC, поэтому, если вам когда-либо понадобится внести изменения или даже преобразовать вашу программу в веб-приложение, вы просто измените интерфейс. Следуя этой логике, я предлагаю сохранить этот метод в каждой форме отдельно, вместо того, чтобы помещать в другой класс, так как он влияет только на интерфейс вашей программы и перемещение его в другой класс будет тесно связать этот класс с вашим интерфейсом. –