ООП. Вопрос по обновлению полей CEdit и CSpinEdit при смене тайм-фрейма. - страница 2

 
Stanislav Korotky #:
Напишите для начала, какой тип программы. Эксперты и индикаторы инициализируются и деинициализируются по-разному.

это эксперт.

если кто-то из знатоков подскажет правильный ответ, буду признателен за науку.

но эту проблему решил сам, методом "практического тыка" )

у каждого поля CSpinEdit в методе Create была соответствующая функция, в которой стояла строка с присвоением значения по умолчанию, примерно такая

m_spin_edit_Value1.Value(10);

вот 10 и исчезала из поля при смене ТФ.


сейчас это место в функции выглядит так:

m_spin_edit_Value1.Value(10);


m_spin_edit_Value1.Value(11);


m_spin_edit_Value1.Value(10);


теперь значение 10 не пропадает... )

 
retired #:

это эксперт.

если кто-то из знатоков подскажет правильный ответ, буду признателен за науку.

но эту проблему решил сам, методом "практического тыка" )

у каждого поля CSpinEdit в методе Create была соответствующая функция, в которой стояла строка с присвоением значения по умолчанию, примерно такая

m_spin_edit_Value1.Value(10);

вот 10 и исчезала из поля при смене ТФ.


сейчас это место в функции выглядит так:

m_spin_edit_Value1.Value(10);


m_spin_edit_Value1.Value(11);


m_spin_edit_Value1.Value(10);


теперь значение 10 не пропадает... )

очевидно потому-что ExtDialog был сделан глобальным объектом

CDialog ExtDialog;

void OnInit() { /* some code */ }

а так делать нельзя, если не хочется ловить глюков

чтобы такого не было - используйте указатели и сами управляйте созданием/удалением критичных объектов. 

CDialog *ExtDialog=NULL;

void OnInit() {  ExtDialog = new CDialog(); }
void OnDeinit() { if (ExtDialog!=NULL) delete ExtDialog ; ExtDialog=NULL; }

тогда 1) вы сами всем управляете и выставляете нужные значения 2) можете контроллировать когда разрушать объект, а когда нет (например при смене ТФ можно не удалять)

 
Maxim Kuznetsov #:

очевидно потому-что ExtDialog был сделан глобальным объектом

CDialog ExtDialog;

void OnInit() { /* some code */ }

а так делать нельзя, если не хочется ловить глюков

чтобы такого не было - используйте указатели и сами управляйте созданием/удалением критичных объектов. 

CDialog *ExtDialog=NULL;

void OnInit() {  ExtDialog = new CDialog(); }
void OnDeinit() { if (ExtDialog!=NULL) delete ExtDialog ; ExtDialog=NULL; }

тогда 1) вы сами всем управляете и выставляете нужные значения 2) можете контроллировать когда разрушать объект, а когда нет (например при смене ТФ можно не удалять)

спасибо, подумаю.

воспроизвел ваш код в своей программе.

теперь при смене ТФ программа закрывается автоматически...