Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2015, 21:17   #1
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Пользователь выбирает комбинацию из 5 CheckBox-ов на форме и в зависимости от выбора функция в программе будет получать разные аргументы. Получается такой говнокод:
Код:
if (((CheckBox1->Checked)!=true) & ((CheckBox2->Checked)!=true)
& ((CheckBox3->Checked)!=true) & ((CheckBox4->Checked)!=true)
& ((CheckBox5->Checked)!=true))  ShowMessage ("Нужно выбрать хотя бы 1 пункт!");
else
{
if (CheckBox1->Checked) param1=true; else param1=false;
if (CheckBox2->Checked) param2=true; else param2=false;
if (CheckBox3->Checked) param3=true; else param3=false;
if (CheckBox4->Checked) param4=true; else param4=false;
if (CheckBox5->Checked) param5=true; else param5=false;
..
ListFiles(...);
И в самой функции:
Код:
void ListFiles(AnsiString path, TStrings* List,TStrings* FoldList,int glubina)
...
if (param1==true) if ((subparam1=="1234") | (subparam2=="6789") | (subparam3=="5555"))
   {
   код1
   }
if (param2==true) if ((subparam1=="4321") | (subparam2=="9876") | (subparam3=="4444"))
   {
   код2
   }
Поскольку пользователь может выбрать все 5 чекбоксов, то все параметры param1-5 будут true и соответственно в функцию надо передать все 5 комплектов subparam.
Как можно это записать проще и короче?

Немного не понятно объяснил. Короче функция ListFiles сканирует диски на поиск файлов. Чекбоксы задают тип файлов, которые нужно искать.
Если сделать проверку if param1==true then как у меня, то функция будет прогонять 5 раз подряд с разными субпараметрами. Вместо того, чтобы запуститься один раз с полным комплектом.

Последний раз редактировалось Stilet; 23.09.2015 в 22:09.
calypso вне форума Ответить с цитированием
Старый 23.09.2015, 22:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну во-первых:
Код:

bool b=false,c;

for(i=1;i<5 && !b;i++){
 param[i]=(TCheckBox)FindComponent("CheckBox"+IntToStr(i))->Checked;
 if(param[i]) b=true;
}
if(b) {
 ListFiles(...);
} else ShowMessage ("Нужно выбрать хотя бы 1 пункт!");
Где bool param[6];

А во-вторых: Используй для списка сканирования компонент TCheckListBox.
Тогда и маску будет подбирать удобнее:
Код:
AnsiString mask="";
for(int i=0;i<CheckListBox->Count;i++) {
 if(mask!="") mask+=", ";
 if(CheckListBox->Checked[i]) mask+=CheckListBox->Items[i];
}
Ну примерно так, я не знаю конечно как твоя функа сканер устроена, но смысл остается тем же - примени один специализированный компонент для таких случаев, а не набор компонентов.

P.S. Кстати, ты в Билдере пишешь? Или я ошибся?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.09.2015, 00:11   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Сделать (статическую) таблицу, где описаны пары checkbox id / file extension.
Потом циклом обходим таблицу, по ней берем данные из чекбоксов и собирам нужные типы файлов скажем в массив.
waleri вне форума Ответить с цитированием
Старый 24.09.2015, 00:13   #4
calypso
Форумчанин
 
Регистрация: 02.12.2012
Сообщений: 250
По умолчанию

Да Билдер, только современный. Embarcadero XE8 C++
На Visual C++ код будет значительно отличаться, как минимум вместо ShowMessage будет MessageBox::Show
calypso вне форума Ответить с цитированием
Старый 24.09.2015, 08:05   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Да Билдер, только современный. Embarcadero XE8 C++
Тогда моя идея должна подойтить
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упростить код and150382 Microsoft Office Excel 15 15.02.2013 17:21
Упростить код Gefo PHP 1 14.02.2013 16:36
Упростить код slus Microsoft Office Excel 1 11.02.2013 21:10
Упростить код. VintProg Общие вопросы C/C++ 2 04.11.2011 01:25
Упростить код Shouldercannon Общие вопросы Delphi 7 20.10.2010 17:01