Задача: необходимо отследить изменения внесенные пользователем в значение контролла
Для этого добавляем слушателя события
textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
...
dateTimePicker1.ValueChanged += new EventHandler(dateTimePicker1_ValueChanged);
После этого как только мы программно изменяем свойство Text или Value (например при переходе между записями) генерируется событие при этом для TextBox я могу отличить программный ввод от пользовательского по свойству Modified, а вот для DateTimePicker ничего подобного не обнаружил.
Испробованные варианты:
1. Биндить свойство Value DateTimePicker'а на переменную DateTime, результат аналогичный.
Re: DateTimePicker пользовательский и программный ввод
Здравствуйте, Nixon, Вы писали:
N>Предвариельная постановка: есть набор контроллов отображающих информацию о записи определенного вида N>textBox1 N>textBox2 N>... N>dateTimePicker1
N>При перемещении по записям происходит примерно следующее
N>private void Read() N>{ N>textBox1.Text = current.Lastname; N>... N>dateTimePicker1.Value = current.Date; N>}
N>Задача: необходимо отследить изменения внесенные пользователем в значение контролла
N>Для этого добавляем слушателя события
N>textBox1.TextChanged += new EventHandler(textBox1_TextChanged); N>... N>dateTimePicker1.ValueChanged += new EventHandler(dateTimePicker1_ValueChanged);
N>После этого как только мы программно изменяем свойство Text или Value (например при переходе между записями) генерируется событие при этом для TextBox я могу отличить программный ввод от пользовательского по свойству Modified, а вот для DateTimePicker ничего подобного не обнаружил.
N>Испробованные варианты: N>1. Биндить свойство Value DateTimePicker'а на переменную DateTime, результат аналогичный.
1)Можно создать переменную bool programModified,
перед началом изменения программно устанавливаем programModified = true, после окончания устанавливаем programModified = false
В каждом обработчике смотрим, if (programModified) {/*Твой код*/}
2) 2 -й вариант похож на 1-й, за исключением того, что всё логику можно вынести в класс, который будет описывать состояние твоего объекта и в нём проводить изменения и забандить контролы на экземпляр этого класса ... + этого варианта в том, что не нужно подписываться на события контролов и самое главное, если ты поменяешь котнролы то логика сохранится
Re[2]: DateTimePicker пользовательский и программный ввод
Спасибо за предложение, я уже думал о подобном варианте, но он показался мне не очень правильным и я рассчитывал на использование каких-то встроенных свойств/методов/событий, т.к на мой взгляд ничего оригинального в моей ситуации нет и она должнаразрешаться штатными средствами.
Re[3]: DateTimePicker пользовательский и программный ввод
Здравствуйте, Nixon, Вы писали:
N>Спасибо за предложение, я уже думал о подобном варианте, но он показался мне не очень правильным и я рассчитывал на использование каких-то встроенных свойств/методов/событий, т.к на мой взгляд ничего оригинального в моей ситуации нет и она должнаразрешаться штатными средствами.
. С помощью которой Вы можете посмотреть, что происходит при изменении свойства Value и убедиться, что нет разделения изменения даты на программный и пользовательский.
Имхо я Бы на вашем месте реализовал логику изменения свойств в объекте current,метод Read() лучше бы заменить на стандартный механизм байдинга, меньше кода писать
Re[4]: DateTimePicker пользовательский и программный ввод
. С помощью которой Вы можете посмотреть, что происходит при изменении свойства Value и убедиться, что нет разделения изменения даты на программный и пользовательский. K>Имхо я Бы на вашем месте реализовал логику изменения свойств в объекте current,метод Read() лучше бы заменить на стандартный механизм байдинга, меньше кода писать
Задачу с DateTimePicker я разрешил предложенным вами способом.
По поводу метода Read
Дело в том что я пробовал делать биндинг-байдинг, но он не работает. Дело в том что объект current является локальной копией удаленного объекта, когда я пытаюсь делать биндинг (current.Свойство — BindingSource — DataTable|TextBox) и происходит изменение (контролла или источника данных), связь распадается, т.е получается следующая ситуация Контрол создает копию источника данных и работает с ней изменения в ней отражаются, но в current ничего не попадает. С проблемой пока не разобрался из-за наличия более насущных.