|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Как выполнить все варианты из "case of" Здравствуйте. Есть комбобокс с вариантами (около 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)
 | ||