Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как организовать условные перехды? условные переходы 
:(
    Опции темы
Dreamuchiy
Дата 2.4.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



У меня на форме несколько Checkbox-ов Там предлакается выбрать либо одно что то, либо несколько сразу.
Как организовать проверку состояний checkbox-ов что бы конечное действие зависило от результата опроса сотояний? Приблизительно так должно быть:
Код


void __fastcall TForm1::Button1Click(TObject *Sender)

{
        float a=0;
        float b=0;
        float c=0;
        if (CheckBox1->State==cbChecked);
        a=1;
        else  if (CheckBox2->State==cbChecked);
        b=1;
        else if (CheckBox3->State==cbChecked)
        c=1;
//----------------------------------------------------------------------------
        if (a=1) // действие1
        if (b=1)  // действие2
        if (c=1)   // действие3
        ..------------------------------------
        // если все по нулям то действие 4


}


Это разумеется у меня не работает! Застревает на else
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
Dmi3ev
Дата 2.4.2008, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



а нельзя сразу, без а и б, допустим, я хочу показать сообщение, если чекбокс1 и чекбокс2 отмечены  smile 
 
Код

if ((CheckBox1->Checked) && (CheckBox2->Checked))
ShowMessage("CheckBox1->Checked. CheckBox2->Checked");

или я чего-то не понимаю  smile 

Это сообщение отредактировал(а) Dmi3ev - 2.4.2008, 22:47


--------------------

PM MAIL   Вверх
korian
Дата 2.4.2008, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



не понимаю... в чем вроблема? так надо?
Код


        bool IsAnyOneChecked = false;
        if (CheckBox1->State==cbChecked)
        {
                //действие1;
                IsAnyOneChecked = true;
        }
        if (CheckBox2->State==cbChecked)
        {
                //действие2;
                IsAnyOneChecked = true;
        }
        if (CheckBox3->State==cbChecked)
        {
                //действие3;
                IsAnyOneChecked = true;
        }
        if (!IsAnyOneChecked)
        {
                //шо-то делаем, когда ничего не выбрано
        }


Это сообщение отредактировал(а) korian - 2.4.2008, 23:03
PM   Вверх
Dreamuchiy
Дата 2.4.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



я в билдере новичек и просто не знаю как еще можно сделать. Очень прошу прокоментировать. Я сделал абросок проги так как по моему это должно выглядеть, только оно не работает. Эта описаная комбинация в принципе мне понятна, хоть я ее и в первый раз вижу.

Добавлено через 4 минуты и 39 секунд
А это чего такое -- IsAnyOneChecked ?
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
korian
Дата 2.4.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



Цитата(Dreamuchiy @  2.4.2008,  22:07 Найти цитируемый пост)
А это чего такое -- IsAnyOneChecked 

переменная типа bool, объявлена в первой строке...
PM   Вверх
Dreamuchiy
Дата 2.4.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



название переменной от балды что ли?
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
Dmi3ev
Дата 2.4.2008, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



да

Добавлено через 1 минуту и 22 секунды
вообще короче писать 
CheckBox1->Checked 
чем
CheckBox2->State==cbChecked



--------------------

PM MAIL   Вверх
xvr
Дата 3.4.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(korian @ 2.4.2008,  23:01)
не понимаю... в чем вроблема? так надо?

Проблема у него видимо в лишней точке с запятой в 9 строке
PM MAIL   Вверх
UniBomb
Дата 3.4.2008, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



Код

float a=0;
float b=0;
float c=0;


Зачем флоат? Почему не bool?

Код

CheckBox1->State==cbChecked


У чекбоксов есть свойтсво Checked, которое равно true если стоит флажок, а иначе false

Таким образом оптимизируем код:

Код

bool a = CheckBox1->Checked;


Далее делаем проверку:

Код

if(a)
{
/*...*/
}

if(b)
{
/*...*/
}

/*...*/


ЗЫ:.

Или более элегантный вариант (если нужно уникальное действие на каждую комбинацию состояний чекбоксов):

Код

void act_1(){Form1->Label1->Caption = "Action 1";}; 
void act_2(){Form1->Label1->Caption = "Action 2";};
void act_3(){Form1->Label1->Caption = "Action 3";};
void act_4(){Form1->Label1->Caption = "Action 4";};
void act_5(){Form1->Label1->Caption = "Action 5";};
void act_6(){Form1->Label1->Caption = "Action 6";};
void act_7(){Form1->Label1->Caption = "Action 7";};
void act_8(){Form1->Label1->Caption = "Action 8";};
typedef void (*act)(void);
act action[] = {&act_1, &act_2, &act_3, &act_4, &act_5, &act_6, &act_7, &act_8};

/*...*/

 int i=0;
 (CheckBox1->Checked ? i|=1:i&=~1),(CheckBox2->Checked ? i|=2:i&=~2),(CheckBox3->Checked ? i|=4:i&=~4);
 action[i]();


Это сообщение отредактировал(а) UniBomb - 3.4.2008, 16:41
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.