|
|
Регистрация | << Правила форума >> | 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; Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#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)
|