DateTimePicker пользовательский и программный ввод
От: Nixon Россия  
Дата: 12.06.07 09:54
Оценка:
Предвариельная постановка: есть набор контроллов отображающих информацию о записи определенного вида
textBox1
textBox2
...
dateTimePicker1

При перемещении по записям происходит примерно следующее

private void Read()
{
textBox1.Text = current.Lastname;
...
dateTimePicker1.Value = current.Date;
}

Задача: необходимо отследить изменения внесенные пользователем в значение контролла

Для этого добавляем слушателя события

textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
...
dateTimePicker1.ValueChanged += new EventHandler(dateTimePicker1_ValueChanged);

После этого как только мы программно изменяем свойство Text или Value (например при переходе между записями) генерируется событие при этом для TextBox я могу отличить программный ввод от пользовательского по свойству Modified, а вот для DateTimePicker ничего подобного не обнаружил.

Испробованные варианты:
1. Биндить свойство Value DateTimePicker'а на переменную DateTime, результат аналогичный.
Re: DateTimePicker пользовательский и программный ввод
От: kisel Украина  
Дата: 12.06.07 14:49
Оценка:
Здравствуйте, 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 пользовательский и программный ввод
От: Nixon Россия  
Дата: 13.06.07 02:00
Оценка:
Спасибо за предложение, я уже думал о подобном варианте, но он показался мне не очень правильным и я рассчитывал на использование каких-то встроенных свойств/методов/событий, т.к на мой взгляд ничего оригинального в моей ситуации нет и она должнаразрешаться штатными средствами.
Re[3]: DateTimePicker пользовательский и программный ввод
От: kisel Украина  
Дата: 13.06.07 08:13
Оценка:
Здравствуйте, Nixon, Вы писали:

N>Спасибо за предложение, я уже думал о подобном варианте, но он показался мне не очень правильным и я рассчитывал на использование каких-то встроенных свойств/методов/событий, т.к на мой взгляд ничего оригинального в моей ситуации нет и она должнаразрешаться штатными средствами.


В MSDN описаны все встроенный свойства/методы/события.
Есть чудная программа Reflector,
здесь: http://rsdn.ru/forum/message/628605.1.aspx
Автор: Lloyd
Дата: 05.05.04
. С помощью которой Вы можете посмотреть, что происходит при изменении свойства Value и убедиться, что нет разделения изменения даты на программный и пользовательский.
Имхо я Бы на вашем месте реализовал логику изменения свойств в объекте current,метод Read() лучше бы заменить на стандартный механизм байдинга, меньше кода писать
Re[4]: DateTimePicker пользовательский и программный ввод
От: Nixon Россия  
Дата: 13.06.07 09:46
Оценка:
Здравствуйте, kisel, Вы писали:

K>В MSDN описаны все встроенный свойства/методы/события.

K>Есть чудная программа Reflector,
K>здесь: http://rsdn.ru/forum/message/628605.1.aspx
Автор: Lloyd
Дата: 05.05.04
. С помощью которой Вы можете посмотреть, что происходит при изменении свойства Value и убедиться, что нет разделения изменения даты на программный и пользовательский.

K>Имхо я Бы на вашем месте реализовал логику изменения свойств в объекте current,метод Read() лучше бы заменить на стандартный механизм байдинга, меньше кода писать

Задачу с DateTimePicker я разрешил предложенным вами способом.

По поводу метода Read
Дело в том что я пробовал делать биндинг-байдинг, но он не работает. Дело в том что объект current является локальной копией удаленного объекта, когда я пытаюсь делать биндинг (current.Свойство — BindingSource — DataTable|TextBox) и происходит изменение (контролла или источника данных), связь распадается, т.е получается следующая ситуация Контрол создает копию источника данных и работает с ней изменения в ней отражаются, но в current ничего не попадает. С проблемой пока не разобрался из-за наличия более насущных.

Спасибо за ответы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.