[РЕШЕНО] Инициализация RadioButton при открытии окна

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

[РЕШЕНО] Инициализация RadioButton при открытии окна

Сообщение speed_vm » 17.01.2013 09:41:39

Здравствуйте, уважаемые!
Предыстория. Имеется установленная IDE Lazarus 1.0.4. В ней создан проект. В проекте две формы: главная и побочная. Побочная форма показывается посредством выбора пункта меню. На побочной форме имеется два объекта GroupBox, в которых имеется по два объекта RadioButton. На событии побочной формы OnShow висит процедура FormShow, в которой прописано следующее
Код: Выделить всё
...
RadioButton1.Checked:= True;
RadioButton3.Checked:= True;
...

Проблема. При первом открытии побочной формы естественно выбор радиокнопок верный. При последующих открытиях побочной формы остаются выбранными те радиокнопки, которые были выбраны перед закрытием формы.
Баг1. Если выполнять программу пошагово, то код, описанный выше, срабатывает.
Баг2. Если перед закрытием формы нажать на какую-нибудь кнопку (даже если на неё никаких действий не повешено) или раскрыть список ComboBox, код срабатывает.
Баг3. Если закрывать форму посредством нажатия на кнопку, на которую повешено событие Close, код срабатывает.
Добрые люди! Помогите справиться с сей бедой, ибо КровьИзНоса нужно, чтобы при открытии побочной формы радиокнопки были выбраны только те, которые указаны.
Последний раз редактировалось speed_vm 17.01.2013 14:53:18, всего редактировалось 1 раз.
speed_vm
 

Re: Инициализация RadioButton при открытии окна

Сообщение Light13 » 17.01.2013 11:27:59

Вынесите установку значений в отдельный public метод и вызывайте его перед показом формы.
Можно даже свой метод сделать для инициализации и показа.

Код: Выделить всё
TChildForm = class(TForm)
  ...
public
  procedure SetDefault;
  procedure CustomShow;
end;

...

procedure TChildForm.SetDefault;
begin
  RadioButton1.Checked:= True;
  RadioButton3.Checked:= True;
end;

procedure TChildForm.CustomShow;
begin
  SetDefault;
  Show;
end;
Аватара пользователя
Light13
постоялец
 
Сообщения: 127
Зарегистрирован: 17.07.2009 07:50:10
Откуда: Челябинск

Re: Инициализация RadioButton при открытии окна

Сообщение Frolik » 17.01.2013 11:53:49

А можно вообще создавать форму на лету.

Код: Выделить всё
ChildForm:=TChildForm.Create(self);
ChildForm.ShowModal;
ChildForm.Free;


установку начальных значений тогда поместить в TChildForm.Create, onShow убрать нафиг, из lpr убрать создание формы.
Frolik
постоялец
 
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Re: Инициализация RadioButton при открытии окна

Сообщение speed_vm » 17.01.2013 12:47:16

Light13 писал(а):Вынесите установку значений в отдельный public метод и вызывайте его перед показом формы.
Можно даже свой метод сделать для инициализации и показа.

Код: Выделить всё
TChildForm = class(TForm)
  ...
public
  procedure SetDefault;
  procedure CustomShow;
end;

...

procedure TChildForm.SetDefault;
begin
  RadioButton1.Checked:= True;
  RadioButton3.Checked:= True;
end;

procedure TChildForm.CustomShow;
begin
  SetDefault;
  Show;
end;


Сделал всё, как написано. В первой группе при запуске формы активной становится первая радиокнопка. НО! Во второй группе активной остаётся та, что была до закрытия! Я просто в шоке.
speed_vm
 

Re: Инициализация RadioButton при открытии окна

Сообщение Frolik » 17.01.2013 14:29:03

Сделал всё, как написано. В первой группе при запуске формы активной становится первая радиокнопка. НО! Во второй группе активной остаётся та, что была до закрытия! Я просто в шоке.

В этом случае дочернюю форму нужно открывать методом CustomShow.
Frolik
постоялец
 
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Re: Инициализация RadioButton при открытии окна

Сообщение speed_vm » 17.01.2013 14:52:42

Не знаю, на счёт последнего ответа Frolik (не проверял). Всё работает (и без манипуляций, предложенных Light13), если перед закрытием формы перевести фокус с радиокнопки на какой-нибудь другой объект.
Благодарю всех за помощь. Тема закрыта.
speed_vm
 


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 222

Рейтинг@Mail.ru