В моем типичном приложении есть несколько текстовых полей, флажков, радиокнопок и т. Д. Я всегда хочу загрузить настройки, которые пользователь использовал в последний раз при запуске программы, а также хочу сохранить настройки, когда пользователи нажимают «Сохранить настройки» или закрывают приложение. Когда пользователь пытается сохранить настройки, мне придется проверять каждый из элементов управления на наличие ошибок ввода (иногда они должны иметь максимальную длину, иногда только заглавные буквы, иногда другие вещи, для них нет правила все, каждый раз будет по-другому), и только если все будет в порядке, я позволю ему сохранить настройки. Если что-то не так, опция не сохраняется, и мой провайдер errorcontrol выдает описание информации о типе ввода, которая должна быть помещена в этот элемент управления.
Я разрабатывал это с нуля для всех своих проектов, но это было болезненно. Так что я подумала, что сейчас самое время сделать библиотеку, чтобы помочь мне. Сначала я подумал, что, возможно, было бы неплохо иметь все элементы управления в моей форме, которые будут частью этого процесса сохранения / загрузки, чтобы иметь связанный с ними атрибут, что-то вроде
public delegate bool InputIsOkHandler();
public class OptionsAttribute : Attribute {
public Control controlRef;
public InputIsOkHandler IsInputOk;
public string errorMessageToShowOnErrorProvider;
public OptionsAttribute(Control controlRef, InputIsOkHandler inputHandler, string errMessage) {
...
}
}
Основная проблема здесь заключается в том, что когда я объявляю атрибут для данной переменной:
[Options(...)]
TextBox textBox1 = new TextBox();
Я получу
Ошибка 1 Аргументом атрибута должно быть константное выражение, выражение typeof или выражение создания массива типа параметра атрибута.
Так что я думаю, что этот подход не самый лучший. Что бы вы, ребята, сделали в этой ситуации? Вы бы использовали атрибуты? Будете ли вы использовать другие механизмы?
Спасибо