2016-04-27 5 views
0

Это вопрос «Хорошего программирования», чтобы избежать необходимости вырезать и вставлять код. Наставник по программированию однажды сказал мне, что если вы вырезаете и вставляете код, вы, вероятно, ошибаетесь. У меня есть приложение форм 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(); 
     } 
    } 
+1

Я предлагаю, используя * абстрактный * базовый класс, унаследованный от '' form' с кнопкой Cancel', 'buttonCancel_Click method'' DataChanged' собственность и т.д. При реализации форма просто наследует от базового класса. –

+0

Я бы предложил использовать либо функцию, которая обрабатывает логику: «if (ValidateChangesMade (dataChanged)) { this.Close(); } 'или добавление логики в класс CancelForm: 'if (CancelForm.ValidateChangesMade (dataChanged)) { this.Close(); } ' – MrApnea

+1

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

ответ

0

я решил последовать Костас Balis советует, так что я в основном скопировать и вставить свой код, чтобы каждый из форм с помощью кнопки отмены. Я надеялся узнать что-то новое, но, похоже, это не было лучшим местом/временем, чтобы изучить его.

От Dimitry «Использование абстрактного базового класса, унаследованного от формы ....», используемый многими терминами, которые я не совсем понимаю. Я знаю, что мне нужно учиться.

Опция FSDaniel выглядит интересной. Я никогда не думал передать это. Закройте как переменную для моего класса формы отмены. Это, вероятно, ближе всего к тому, что я изначально думал о том, чтобы делать.

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

P.S. Программа, которую я пишу, заменяет программу, которую я написал 15 лет назад, используя Access 97, и она все еще идет на производство :)

Спасибо за ваши мысли и комментарии.

Дэвид