проверка данных листа свойств

Когда пользователь нажимает кнопку «ОК» или «ПРИМЕНИТЬ» на листе свойств, а программа определяет, что данные на какой-то странице недействительны, как я могу заставить страницу, содержащую ошибку, отображаться вместе с окном сообщения, описывающим ошибку?

В настоящее время процедура проверки делает следующее при обработке уведомления PSN_APPLY.

MessageBox (hDlg, "Data must be positive!", "Error", MB_OK);
SetWindowLong (hDlg, DWL_MSGRESULT, PSNRET_INVALID);

Это работает нормально, если в данный момент отображается страница, выполняющая проверку (A), но если отображается какая-то другая страница (B), появляется окно сообщения с отображаемой страницей (B), затем, когда на окно сообщения получен ответ, страница с ошибкой проверки (A). Я подумал об установке какого-нибудь флага, чтобы когда эта страница (A) получала уведомление PSN_SETACTIVE, она отображала окно сообщения, но это выглядит как фейк.

Win32 API на С++, без MFC, без NET, ничего особенного.


person Mike D    schedule 10.07.2011    source источник


Ответы (1)


Я думаю, что проблема в дизайне вашей проверки и ее презентации.

Правильно ли я понимаю, что вы перебираете листы свойств, проверяете их и отображаете окно сообщения, если что-то не так? Потому что, конечно, то, что вы видели, произойдет, если я нахожусь на странице свойств 3 и написал дерьмо в поле на странице свойств 1.

Самое простое решение — при проверке отметить, на какой странице свойств находится рассматриваемое поле, и сделать ее активной, если пользователь написал дерьмо в одном из ваших полей. Это кажется самым быстрым способом.

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

Еще лучше, не останавливайтесь на первой ошибке. Одна вещь, которую я НЕНАВИЖУ, это исправление одного поля, которое я считаю единственной проблемой, только для того, чтобы каждый раз, когда я нажимаю «ОК» или «ОТПРАВИТЬ», говорить, что я пропустил что-то еще.

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

person Moo-Juice    schedule 10.07.2011
comment
Некоторые комментарии пронумерованы для ваших 6 абзацев. 2) На самом деле страница свойств перебирает страницы, отправляющие уведомления PSN_APPLY. Он не выходит за пределы страницы, на которой установлен PSNRET_INVALID. 3) Установка PSNRET_INVALID приводит к переключению листа свойств на соответствующую страницу. 4) Кажется разумным решением; Теперь нужно решить, когда удалить сообщение. 5) Сложнее обойтись без игнорирования особенностей страниц свойств, так как уведомления PSN_APPLY прекращаются, когда первая страница сообщает об ошибке. 6) Опять же, сложная часть решает, когда и как удалять сообщения об ошибках. - person Mike D; 10.07.2011