![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Цитата:
Ну или первым циклом при создании формы пройтись по всем компонентам и создать массив радиобаттонов. Я сперва хотел так. ![]() |