| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Странный сайд-эффект при вводе данных на форме |
| Автор: Felan 29.8.2009, 23:45 | ||||
Есть форма.
Полные файлы приложил в архиве. Вызывается таким образом:
Так вот. Заполняем поля и жмем Tab. Последовательно. Начиная с фамилии и заканчивая номером квартиры. Т.е. в процессе вводим значение номера дома, потом номера квартиры. Далее жмем таб, переходит фокус на кнопку "отменить", потом жмем таб еще раз и переходим на кнопку "принят", в этот момент значение номера дома (nudHouseNumber) сбрасывается в 0. От чего такое может быть и как от этого избавится? Это происходит только если задавать оба знчения и для квартиры и для номера дома. Если только одно, то все нормально вроде... |
| Автор: diadiavova 30.8.2009, 08:49 |
| А ValidateChildren это что? |
| Автор: Felan 30.8.2009, 08:52 |
| Метод такой есть у формы. Не мой. Родной. Кстати. Текст остальных классов есть http://forum.vingrad.ru/index.php?showtopic=271076&view=findpost&p=1952731 Добавлено через 1 минуту и 55 секунд Да и не срабатывает он... для воспроизведения эффетка не нужно нажимать на кнопку. Достоточно просто нажать таб, что бы кнопка получила фокус. |
| Автор: diadiavova 30.8.2009, 12:02 |
Действительно есть В твоём аттаче только код формы. Запускаешь ты её при помощи непонятных классов. Выложи проект, никто не будет его собирать по кускам, чтобы посмотреть что там не так. |
| Автор: Felan 30.8.2009, 13:41 |
| Вот тестовый проект. Эффект посторяется однозначно. |
| Автор: diadiavova 30.8.2009, 14:22 | ||
Попробуй так
|
| Автор: Felan 30.8.2009, 14:34 |
| Так пробовал. Так нормально все. Но в этом случае, даже если нажать отмену, то измененные данные все равно сохраняются... что собственно очевидно. Ну это для случая редактирования, когда в форму передается не "чистый" объект, для "нового" человека, а уже существующий, для редактирования. |
| Автор: diadiavova 30.8.2009, 14:47 | ||||
| А для чего вообще тебе тут нужно связывание? Сделай примерно так Человека опиши примерно такой структурой
Дальше в форму введи метод типа такого
Когда диалог отработает вызовешь у него этот метод, он и выдаст результат. Мне лично не понятно зачем связывать всё. А в ноль оно сбрасывает потому, что связано со свойством и не успевает передать ему значение, а при обновлении возвращается то значение, которое есть у связанного объекта. |
| Автор: diadiavova 30.8.2009, 22:05 | ||||||
Можно, но я не знаю как ещё ты этот класс используешь, а структуры удобны для обмена информацией. Да к тому же описание её в трёх строчках содержится. Лишние взаимосвязи между объектами приводят к ошибкам, которые трудно отловить. Но это не значит, что нельзя этот использовать. Смотри по ситуации. Кстати если окошко используется для редактирования записи(а не только создания), то можно не метод а свойство прилепить, в сеттере инициировать начальные значения, а геттер оставить таким же как та функция, что я привёл.
Ну это стандартная работа с диалоговыми окнами. Возьми какой-нибудь файл или колор диалог везде одна схема: Создаётся экземпляр (обычно присутствует конструктор без параметров) Некотором свойствам окна может быть присвоено инициирующее значение Далее проверяется результат работы функции ShowDialog и если он удовлетворяет нужному условию(обычно ОК), то с диалога снимается результат его работы. По-моему этот механизм самый удобный и безопасный.
Там надо позыреть как оно по-умолчанию обновляется. Как видишь, если обновлять при изменении значения то этого не происходит. Я в твой пример запихнул ещё NUD(ни с чем не связанный), эффект вроде пропал, но если пройтись табулятором по кругу ещё раз, то он появляется, только теперь уже для последнего из связанных NUD'ов(котроый квартира). Потом добавил ещё один и то же самое и опять для квартиры. И кстати эффект есть только когда перемещаешься табулятором, а значение меняешь цифровыми клавишами(если менять клавишами со стрелками, то всё нормуль).
Ну обычно связывать удобно с таблицами или коллекциями. Каждый контрол привязывается к какому-то полю таблицы и когда перемещаешься по записям все контролы отображают значение связанного поля текущей записи. Есть ещё другой пример связывания, это связывание с настройками приложения, здесь удобно то, что всё сохраняется даже при закрытии программы. Правда всё это делается в дизайнере, и основные преимущества связывания именно в том, что можно избавиться от значительной части ручного кода, и для работы с данными это удобно, но там всё стандартное и в мсдн полно примеров. |
| Автор: Felan 31.8.2009, 06:28 | ||
Мда... пожалуй. Странно, на делвях сам все время так делал... а тут че-то понесло.
Странная фигня. Тему закрывать не буду. Но и сам уже переделал на обычное назначение. Черт с ним с биндингом. Спасибо за отзывчивость |