Тема: не установить флаг по умолчанию на форме без объекта

Вызываю форму для ввода параметров отчета, на ней - флаги. но установить их по умолчанию не получается. в чем ошибка?
Скрипты такие:
set form = ThisApplication.InputForms("FORM_REPORT_PROJECT")
form.Show
....
Sub Form_BeforeShow(Form, Obj)
    Form.Attributes("REP_STAGE_OTR").value = true
    Form.Attributes("REP_STAGE_PROJECT").value = true
    Form.Attributes("REP_STAGE_RESEARCH").value = true
    Form.Attributes("REP_STAGE_WORK").value = true
    Form.Refresh
End Sub

Re: не установить флаг по умолчанию на форме без объекта

iui пишет:

Вызываю форму для ввода параметров отчета, на ней - флаги. но установить их по умолчанию не получается. в чем ошибка?
Скрипты такие:
set form = ThisApplication.InputForms("FORM_REPORT_PROJECT")
form.Show
....
Sub Form_BeforeShow(Form, Obj)
    Form.Attributes("REP_STAGE_OTR").value = true
    Form.Attributes("REP_STAGE_PROJECT").value = true
    Form.Attributes("REP_STAGE_RESEARCH").value = true
    Form.Attributes("REP_STAGE_WORK").value = true
    Form.Refresh
End Sub

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

Чтобы исправить вашу проблему:

  • либо замените свойство Attributes на свойство Controls. В этом случае атрибуты по прежнему будут иметь старые значения, а элементы управления - новые;

  • либо используйте другой контекст. Вам нужен обработчик событий объекта, например, Object_PropertiesDlgInit(Dialog, Obj, Forms). Тут вы честно установите атрибуты.

Ну а я в свою очередь, погрузился в теоретические измышления  ;)

Re: не установить флаг по умолчанию на форме без объекта

McZag пишет:

Ну а я в свою очередь, погрузился в теоретические измышления  ;)

Мне тут один участник форума в личке (чтобы не портить авторитет, видимо  :)) подсказал, что вы пишете о свободной, отвязанной от объекта форме. А я вам про форму, отображающую свойства объекта. Это разные вещи.

К тому я не использовал Form.Refresh, поэтому у меня атрибуты на форме и не обновились. На самом деле никакой ошибки нет, TDMS все корректно показывает, если форма привязана к объекту.

У свободной формы нет атрибутов. Замените свойство Attributes на свойство Controls и все у вас будет хорошо.

Извините, что сразу не вкурил, да еще и начал обвинять TDMS в том, в чем он ни разу не виноват