|
|
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
Добрый день! Уважаемые профессионалы, подскажите пожалуйста, как правильно реализовать такую вещь. Есть многостраничная форма с кучей контролов. Надо последовательно проверить корректность их содержимого. То есть для каждого контрола повторяется одно и то же действие. Повторять один и тот же код меняя только объект как то не очень. Как правильно оформить процедуру или класс , который будет проделывать нужные действия или может есть еще какой способ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 09:13 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
цикл for each для перебора элементов в коллекции функция pemstatus() для проверки наличия свойств/методов у объектов. Вот пример рекурсивного обхода всех контролов для изменения размеров шрифта. thisform.ResizeObject() Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Вызывается thisform.ResizeObject(thisform) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 09:21 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
Извиняюсь, изначально неверно описал задачу. Проверять надо не все объекты, только часть из них. Смысл в том, чтобы при внесении данных и нажатии кнопки "сохранить" проверялось заполнение контролов, обязательных для заполнения. Если что-то неправильно, сообщить пользователю и установить фокус на нужный объект. Типа такого CASE EMPTY(THISFORM.PAGEFRAME.page1.text1.VALUE)=.T. MESSAGEBOX('Не заполнены обязателные реквизиты',0,'Ошибка') THISFORM.PAGEFRAME.ACTIVEPAGE = 1 THISFORM.PAGEFRAME.page1.text1.SETFOCUS() THISFORM.PAGEFRAME.page1.text1.BACKCOLOR= 16744703 Объектов несколько десятков, повторять для каждого одно и то же не хочется. А если сделать для контролов LostFocus + NODEFAULT или Valid + RETURN 0, тоже как-то не то. Вообще, как правильнее это реализовать. Может я делаю совсем не то и не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 10:17 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
_ChaynikИзвиняюсь, изначально неверно описал задачу. Проверять надо не все объекты, только часть из них. Смысл в том, чтобы при внесении данных и нажатии кнопки "сохранить" проверялось заполнение контролов, обязательных для заполнения. Если что-то неправильно, сообщить пользователю и установить фокус на нужный объект. Типа такого CASE EMPTY(THISFORM.PAGEFRAME.page1.text1.VALUE)=.T. MESSAGEBOX('Не заполнены обязателные реквизиты',0,'Ошибка') THISFORM.PAGEFRAME.ACTIVEPAGE = 1 THISFORM.PAGEFRAME.page1.text1.SETFOCUS() THISFORM.PAGEFRAME.page1.text1.BACKCOLOR= 16744703 Объектов несколько десятков, повторять для каждого одно и то же не хочется. А если сделать для контролов LostFocus + NODEFAULT или Valid + RETURN 0, тоже как-то не то. Вообще, как правильнее это реализовать. Может я делаю совсем не то и не так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 10:52 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
_ChaynikВообще, как правильнее это реализовать. Может я делаю совсем не то и не так? Не так. Изначально. Проверять надо не контролы, а значения . Как правило, большинство контролов привязаны к полям той или иной таблицы. И совершенно не имеет значения, что отображено в контролах. Принципиально важно, что оказалось записано в поля таблиц-источников. Вот их-то и надо проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 11:26 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
ВладимирМ _ChaynikВообще, как правильнее это реализовать. Может я делаю совсем не то и не так? Не так. Изначально. Проверять надо не контролы, а значения . Как правило, большинство контролов привязаны к полям той или иной таблицы. И совершенно не имеет значения, что отображено в контролах. Принципиально важно, что оказалось записано в поля таблиц-источников. Вот их-то и надо проверять. Немного не понял. Контролы действительно привязаны к полям таблицы. используется буферизация. Если я правильно представляю, в буферизованной таблице при модификации таблицы записи присваивается некий отрицательный номер, который при сбросе буфера заменяется на реальный. Может ли в таких условиях различаться содержимое контрола и поля таблицы ? И как тогда правильно сделать ? С уважением, _Chaynik ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 11:39 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
_ChaynikНемного не понял. Контролы действительно привязаны к полям таблицы. используется буферизация. ...... Может ли в таких условиях различаться содержимое контрола и поля таблицы ? И как тогда правильно сделать ? Обычно делается так - Создаются ограничения на поля и записи таблицы через PK, CK, FK, Rule, Trigger - это гарантирует непротиворечивость данных на уровне СУБД, при этом не важно как данные попали в таблицу через твой интерфейс или через стороннюю софтину. - в кнопке сохранить анализируют возврат ф-ии TableUpdate и AERROR после чего выдают "человеческое сообщение" об ошибке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 12:00 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
to PaulWist Да это все там уже есть, и проверка достоверности и обработка функции AERROR и разбор возвращаемых ошибок. Просто кроме этого хотелось контролировать именно заполнение полей, чтобы юзер не оставлял пустым поле, которое обязательно должно быть заполнено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 13:39 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
_ChaynikПросто кроме этого хотелось контролировать именно заполнение полей, чтобы юзер не оставлял пустым поле, которое обязательно должно быть заполнено. Простейшее решение: делаешь свой класс на основе TextBox там добавляешь свойство "cEmptyMessage" тем полям которые необходимо заполнять прописываешь в cEmptyMessage текст сообщения перед сохранением проверяешь. Метод формы CheckEmpty() Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. соответственно в кнопке "Сохранить" код Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 14:03 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
_Chaynikto PaulWist Да это все там уже есть, и проверка достоверности и обработка функции AERROR и разбор возвращаемых ошибок. Просто кроме этого хотелось контролировать именно заполнение полей, чтобы юзер не оставлял пустым поле, которое обязательно должно быть заполнено. Ну если всё есть тогда не понятен сам вопрос - зачем проверять заполнение контрола если на уровне данных происходит проверка, или же всё таки чего-то не хватает для того, что бы в БД не попадали незаполненные данные? 2Dima T Dima T Простейшее решение: делаешь свой класс на основе TextBox там добавляешь свойство "cEmptyMessage" Это латание дыр, надо "причесать" модель данных, а не пытаться кривость структуры латать интерфейсом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 14:19 |
|
||
|
Действие для всех бъектов формы
|
|||
|---|---|---|---|
|
#18+
PaulWist2Dima T Dima T Простейшее решение: делаешь свой класс на основе TextBox там добавляешь свойство "cEmptyMessage" Это латание дыр, надо "причесать" модель данных, а не пытаться кривость структуры латать интерфейсом. Согласен в целом, но есть случаи когда такое решение необходимо. Например SetFocus() по сообщению от БД проблематично делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2008, 14:45 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35187379&tid=1588044]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
99ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 391ms |

| 0 / 0 |
