Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.12.2020, 06:46
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 54
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию Как выполнить все варианты из "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  
Старый 16.12.2020, 09:44
denzenit denzenit вне форума
Прохожий
 
Регистрация: 16.12.2020
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Из-за логики самого оператора поставленную задачу (если я правильно понял вас), не удастся решить.

Тут либо исключить 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  
Старый 16.12.2020, 11:07
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 658
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Код:
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  
Старый 16.12.2020, 18:13
Stanei Stanei вне форума
Новичок
 
Регистрация: 21.05.2015
Сообщения: 54
Версия Delphi: Rad Studio 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от denzenit
Из-за логики самого оператора поставленную задачу (если я правильно понял вас), не удастся решить.

Тут либо исключить 0 из case of и вставить в конце else и после этого else уже прописать все коды. Либо же создать юнит(если не хотите захламлять этот), в нём процедуру со всеми кодами и просто из первого юнита вызывать эту процедуру после else

Как раз сейчас так и реализовано, все процедуры продублированы ради одного варианта((
Думал как-нибудь упростить, ну ладно, надеюсь сильно мешать не будет.

Спасибо за ответ.
Ответить с цитированием
  #5  
Старый 08.01.2021, 23:13
Motorolla Motorolla вне форума
Прохожий
 
Регистрация: 06.06.2019
Сообщения: 8
Версия Delphi: Delphi 7 / XE8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Stanei
Вопрос такой, как сделать, чтобы при выборе первого варианта (case flag 0) выполнялись все варианты от 1 до 19

Ну или вот так, чтобы не расшевеливать уже написанное и всяко меньше лишних строк:

Код:
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)
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter