![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() всем привет, сейчас опишу подробнее ситуацию.
есть форма на ней GroupBox. и button В GroupBox есть 10 radiobutton ( ! НЕ RAdioGroupe ). Пытаюсь сделать такое: по нажатию кнопки button, активным элементом стал radiobutton1, а при следующем нажатии активный radiobutton2. (то есть свойство cheked:=true, по очереди, сначала у radiobutton1, radiobutton2 , и тд по очереди). Само собой что все сразу cheked:=true они не могут быть. пробовал с помощью: groupbox2.Component; groupbox2.Control; Не вышло ничего. с RAdioGroupe конечно в этом плане понятно все, переход по итеминдех. Но к сожалению не подходит. Если есть думки по этому вопросу, как сделать, то подскажите пожалуйста. |
#2
|
||||
|
||||
![]() Ну просто создавай глобальную переменную и увеличивай ее на 1.
Код:
var Form1: TForm1; N: Integer = 1; ... button1Click: begin Case N of 1: RadioButton... ... Помогаю за Спасибо ![]() |
#3
|
|||
|
|||
![]() спасибо за ответ.
Этот вариант ну скажем , самый последний, так как по задумке радиобутонов на форме будет 80 штук, ну и не очень то хотелось бы ... ну вы поняли )) а 10 радиобутонов в отладочной версии, чтобы был понятен принцип работы сейчас прочитал про свойство Tag у радиобуттона, не совсем понял, но буду копать дальше Последний раз редактировалось gvozdkoff, 11.12.2010 в 09:40. |
#4
|
||||
|
||||
![]() Главное TabOrder'ы правильно выставь.
Код:
var Current: integer; // Глобальная переменая ... procedure TForm1.Button_NextClick(Sender: TObject); var i: integer; begin for i := 0 to ComponentCount - 1 do if (Components[i] is TRadioButton) then if (Components[i] as TRadioButton).Tag > Current then begin (Components[i] as TRadioButton).Checked := true; Current := (Components[i] as TRadioButton).Tag; break; end; end; procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin Current := 0; for i := 0 to ComponentCount - 1 do if (Components[i] is TRadioButton) then begin (Components[i] as TRadioButton).Tag := Current; Inc(Current); end; Current := -1; end; Последний раз редактировалось BoRoV, 11.12.2010 в 10:51. |
#5
|
|||
|
|||
![]() Ну, собственно, ответ тебе почти дали.
Расстановка Tag'ов в нужном порядке, далее по текущему находим следующий (цикл по всем компонентам) и делаем его Checked. вообще, если радиокнопки создаются динамисески, то можно просто при создании запихать их в массив и дальше работать с этим массивом: Код:
type TForm1=class(TForm) private FButtons : TObjectList; end; ... procedure TForm1.FormCreate(Sender : TObject); begin FButtons := TObjectList.Create(False); end; procedure TForm1.CreateRB(N : Integer); var I : Integer; B : TRadioButton; begin FButtons.Clear; For I := 1 To N Do Begin B := TRadioButton.Create(Self); B.Top := I * 10; B.Left := 10; FButtons.Add(B); B.Parent := GroupBox1; End; (FButtons[0] As TRadioButton).Checked := True; end; procedure TForm1.Button1Click(Sender : TObject); var I : Integer; begin For I := 0 To FButtons.Count-1 Do If (FButtons[i] As TRadioButton).Checked Then Begin If I < FButtons.Count-1 Then (FButtons[I+1] As TRadioButton).Checked := True Else (FButtons[0] As TRadioButton).Checked := True End; end; |
#6
|
||||
|
||||
![]() Есть ещё такой вариант:
Код:
var I: Integer; procedure TForm1.Button1Click(Sender: TObject); begin if I < Form1.ComponentCount - 2 then // '- 2' - вычитаем кол-во всех остальных Inc(I) // компонентов, кроме radiobutton-ов else // чтобы получить текущее кол-во radiobutton-ов I := 1; (FindComponent(Format('RadioButton%d',[i])) as TRadioButton).Checked := True; end; Последний раз редактировалось ryderx34, 11.12.2010 в 11:33. |
#7
|
||||
|
||||
![]() Цитата:
Ну или первым циклом при создании формы пройтись по всем компонентам и создать массив радиобаттонов. Я сперва хотел так. ![]() |