![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте.
Есть комбобокс с вариантами (около 20шт). В событии ComboBox1Change такой код: Код:
var flag:word; begin flag:=combobox1.itemindex; ... case flag of 0:begin //выполнить все варианты end; 1:begin //код1 end; 2:begin //код2 end; //и т.д. до 19 end; Вопрос такой, как сделать, чтобы при выборе первого варианта (case flag 0) выполнялись все варианты от 1 до 19 |
|
#2
|
|||
|
|||
|
Из-за логики самого оператора поставленную задачу (если я правильно понял вас), не удастся решить.
Тут либо исключить 0 из case of и вставить в конце else и после этого else уже прописать все коды. Либо же создать юнит(если не хотите захламлять этот), в нём процедуру со всеми кодами и просто из первого юнита вызывать эту процедуру после else при первом варианте будет так Код:
1 var flag:word; begin flag:=combobox1.itemindex; ... case flag of 1:begin //код1 end; 2:begin //код2 end; else //код1 //код2 //код3 //код4 и т.д end; Во втором Код:
1
var flag:word;
begin
flag:=combobox1.itemindex;
...
case flag of
1:begin
//код1
end;
2:begin
//код2
end;
else
begin
имя процедуры(параметры);
end;
end; |
| Этот пользователь сказал Спасибо denzenit за это полезное сообщение: | ||
Stanei (16.12.2020)
| ||
|
#3
|
||||
|
||||
|
Код:
procedure DoSomething(flag: Integer);
begin
case flag of
0: {do action 1};
1: {do action 2};
...
n: {do action n};
else
{do another action};
end;
end;
procedure TForm1.Combobox1Change(Sender: TObject);
var
i: Integer;
begin
for i := Combobox1.ItemIndex to Combobox1.Items.Count - 1 do
DoSomething(i);
end; |
|
#4
|
|||
|
|||
|
Цитата:
Как раз сейчас так и реализовано, все процедуры продублированы ради одного варианта(( Думал как-нибудь упростить, ну ладно, надеюсь сильно мешать не будет. Спасибо за ответ. |
|
#5
|
|||
|
|||
|
Цитата:
Ну или вот так, чтобы не расшевеливать уже написанное и всяко меньше лишних строк: Код:
var f,ia:word;
begin
f:=combobox1.itemindex;
ia:=f;
repeat
case ia of
1: Memo1.Lines.Add('1');
2: Memo1.Lines.Add('2');
3: Memo1.Lines.Add('3');
4: Memo1.Lines.Add('4');
5: Memo1.Lines.Add('5');
end;
if f=0 then inc(ia,1) else break;
until ia>5;
end; |
| Этот пользователь сказал Спасибо Motorolla за это полезное сообщение: | ||
denzenit (11.01.2021)
| ||