Перейти к содержанию
Fire Monkey от А до Я
  • 0

Раскрытый список как ComboEdit


Rusland

Вопрос

Не могу сообразить. Нужен раскрытый список c radiobutton-ами. Такой же как в ComboEdit после нажатия треугольничка.

Пробовал ListBox c ShowCheckboxes=true - не подходит, там можно выбрать несколько, а мне надо дать возможно выбрать только одно.

Какой компонент использовать?

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
17 часов назад, Rusland сказал:

Не могу сообразить. Нужен раскрытый список c radiobutton-ами. Такой же как в ComboEdit после нажатия треугольничка.

Пробовал ListBox c ShowCheckboxes=true - не подходит, там можно выбрать несколько, а мне надо дать возможно выбрать только одно.

Какой компонент использовать?

ну вариант с ListBox самый простой в реализации, просто допилить.

При выборе галочки, пробежать по всем элементам и отключить у других

Ссылка на комментарий
  • 1

Тут главное не забыть RadioButton1.GroupName:='SelectDestiny' и так для всех RadioButton одинаковый GroupName, тогда выбираться будет только один.

procedure TFormMain.CreateOpenComboEdit;
Const GroupName = 'Select destiny';
Var I : Integer;
    ALisBoxItem : TListBoxItem;
    ARadioButton : TRadioButton;
begin
  for I := 0 to 5 do
  begin
    ALisBoxItem:=TListBoxItem.Create(ListBox);
    ALisBoxItem.Text:='';
    ARadioButton:=TRadioButton.Create(ALisBoxItem);
    ARadioButton.GroupName:=GroupName;
    ARadioButton.Text:=GroupName+' '+I.ToString;
    ARadioButton.Align:=TAlignLayout.Client;
    ALisBoxItem.AddObject(ARadioButton);
    ListBox.AddObject(ALisBoxItem);
  end;
end;

 

Ссылка на комментарий
  • 0
3 часа назад, Rusland сказал:

Евгений Корепов, как "пробежать" по такому списку и проверить какой выделен?

Способов множество, вот один из них:

function TFormMain.GetCheckedIndex : Integer;
Var I : Integer;
begin
  for I := 0 to ListBox.Count-1 do
  begin
    if Assigned(ListBox.ItemByIndex(I).Children.Items[0]) then
      if ListBox.ItemByIndex(I).Children.Items[0] is TRadioButton then
        if (ListBox.ItemByIndex(I).Children.Items[0] as TRadioButton).IsChecked Then
        begin
          Result:=I;
          Exit;
        end;
  end;
  Result:=-1;
end;

Или же можно назначить всем один обработчик изменения     ARadioButton.OnChange:=RadioButtonChange;

procedure TFormMain.RadioButtonChange(Sender: TObject);
Var Index : Integer;
begin
  if Sender is TRadioButton then
    Index:=((Sender as TRadioButton).Parent as TListBoxItem).Index;
end;

 

Ссылка на комментарий
  • 0
2 минуты назад, Евгений Корепов сказал:

Или же можно назначить всем один обработчик изменения     ARadioButton.OnChange:=RadioButtonChange;


procedure TFormMain.RadioButtonChange(Sender: TObject);
Var Index : Integer;
begin
  if Sender is TRadioButton then
    Index:=((Sender as TRadioButton).Parent as TListBoxItem).Index;
end;

 

Да, я как раз повесил всем один обработчик и просто сохраняю выделенное в глобальную переменную, а потом уже использую.

Изменено пользователем Rusland
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...