Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
2 / 2 / 1
Регистрация: 04.02.2010
Сообщений: 143
1

События в ComboBox

13.01.2016, 17:31. Показов 5041. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
никак не могу придумать как реализовать следующий функционал:
на форме есть 10 CheckBox и 1 ComboBox, у ComboBox есть 3 строчки.
пользователь выбирает в checkbox необходимые действия, которые соответствуют одной из строк в combobox.
я никак не могу найти событие для сохранения состояния checkbox перед тем как выберу новую строчку в combobox.
прошу помощи
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2016, 17:31
Ответы с готовыми решениями:

Скрытие ComboBox при наступлении события
Здравствуйте! Прошу, пожалуйста, объяснить мне. У меня имеется форма, на которой выполняется...

Combobox и события
Здраствуйте. В режиме разработки android combobox отличается от стандартного combobox. В режиме...

Два события combobox
Доброго времени суток.) Прошу помочь разобраться в сложившейся ситуации. Есть два события для...

Обработка события выбора в ComboBox
Вот есть ComboBox в диалоговом окне, как обработать событие выбора элемента? То есть щелкнул,...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
13.01.2016, 18:22 2
Используй OnDropDown, оно возникает в момент открытия выпадающего списка комбобокса, следовательно, это будет перед выбором новой строки комбобокса.
0
2 / 2 / 1
Регистрация: 04.02.2010
Сообщений: 143
14.01.2016, 11:28  [ТС] 3
спасибо за совет. остался только один вопрос, а событие OnSelect происходит в момент выбора самого ComboBox или при выборе какой-то строки в ComboBox?

Я собственно попробовал реализовать в двух событиях OnDropDown и OnSelect, но решил отказаться от события OnDropDown потому что пользователь может и не выбрать в ComboBox новую строчку и вообще не щелкнуть по ComboBox, а при следующем запуске программы мне необходимо сохранить предыдущий выбор

Поэтому сейчас пересчет значений я веду примерно так

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
void __fastcall TForm1::CheckBox2MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
    if (0 == ComboBox1->ItemIndex)
    {
        if (CheckBox1->Checked)
            TestListN |= (1 << 0);
        else
            TestListL &=~ (1 << 0);
        if (CheckBox2->Checked)
            TestListN |= (1 << 1);
        else
            TestListN &=~ (1 << 1);
        if (CheckBox3->Checked)
            TestListN |= (1 << 2);
        else
            TestListN &=~ (1 << 2);
        if (CheckBox4->Checked)
            TestListN |= (1 << 3);
        else
            TestListN &=~ (1 << 3);
    }
    if (1 == ComboBox1->ItemIndex)
    {
        if (CheckBox1->Checked)
            TestListL |= (1 << 0);
        else
            TestListL &=~ (1 << 0);
        if (CheckBox2->Checked)
            TestListL |= (1 << 1);
        else
            TestListL &=~ (1 << 1);
        if (CheckBox3->Checked)
            TestListL |= (1 << 2);
        else
            TestListL &=~ (1 << 2);
        if (CheckBox4->Checked)
            TestListL |= (1 << 3);
        else
            TestListL &=~ (1 << 3);
    }
    if (2 == ComboBox1->ItemIndex)
    {
        if (CheckBox1->Checked)
            TestListH |= (1 << 0);
        else
            TestListH &=~ (1 << 0);
        if (CheckBox2->Checked)
            TestListH |= (1 << 1);
        else
            TestListH &=~ (1 << 1);
        if (CheckBox3->Checked)
            TestListH |= (1 << 2);
        else
            TestListH &=~ (1 << 2);
        if (CheckBox4->Checked)
            TestListH |= (1 << 3);
        else
            TestListH &=~ (1 << 3);
    }
}

а перевыбор веду в
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void __fastcall TForm1::ComboBox1Select(TObject *Sender)
{
    CheckBox2->Checked = false;
    CheckBox3->Checked = false;
    CheckBox4->Checked = false;
    CheckBox5->Checked = false;
 
    if ((TestListN & 1) && (ComboBox1->ItemIndex == 0))
        CheckBox1->Checked = true;
    if ((TestListN & 2) && (ComboBox1->ItemIndex == 0))
        CheckBox2->Checked = true;
    if ((TestListN & 4) && (ComboBox1->ItemIndex == 0))
        CheckBox3->Checked = true;
    if ((TestListN & 8) && (ComboBox1->ItemIndex == 0))
        CheckBox4->Checked = true;
 
    if ((TestListL & 1) && (ComboBox1->ItemIndex == 1))
        CheckBox1->Checked = true;
    if ((TestListL & 2) && (ComboBox1->ItemIndex == 1))
        CheckBox2->Checked = true;
    if ((TestListL & 4) && (ComboBox1->ItemIndex == 1))
        CheckBox3->Checked = true;
    if ((TestListL & 8) && (ComboBox1->ItemIndex == 1))
        CheckBox4->Checked = true;
 
    if ((TestListH & 1) && (ComboBox1->ItemIndex == 1))
        CheckBox1->Checked = true;
    if ((TestListH & 2) && (ComboBox1->ItemIndex == 1))
        CheckBox2->Checked = true;
    if ((TestListH & 4) && (ComboBox1->ItemIndex == 1))
        CheckBox3->Checked = true;
    if ((TestListH & 8) && (ComboBox1->ItemIndex == 1))
        CheckBox4->Checked = true;
}


событие CheckBox2MouseUp общее для всех CheckBox
0
32 / 32 / 21
Регистрация: 22.09.2013
Сообщений: 378
14.01.2016, 19:10 4
Я правильно вас понимаю, при выборе 1 элемента в Combobox нужно 1 чек боксу поставить значение True остальным false? Объясните конкретнее пожалуйста и быть может мы придумаем вариант попроще )
0
2 / 2 / 1
Регистрация: 04.02.2010
Сообщений: 143
14.01.2016, 19:15  [ТС] 5
нет-нет, задача у меня такая
есть 4 чекбокса и комбобокс с 3 строками
не знаю как попонятней объяснить, но смысл примерно такой:
у пользователя выбрана 1я строка в комбобоксе
в этот момент он может рандомно раставить галочки в чекбоксах,
после этого он выбирает вторую строку в комбобоксе, а галочки сменяются на значения для второго выбора
и аналогично пользователь их может изменить
значения по умолчанию для чекбоксов и выбор строки комбобокса я храню в ini файле, при выходе значения обновляются
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
16.01.2016, 23:32 6
painless, ну а почему в момент маркирования чекбокса не начать запись в ини файл?

Добавлено через 56 секунд
используя метод dynamic_cast
0
2 / 2 / 1
Регистрация: 04.02.2010
Сообщений: 143
18.01.2016, 14:29  [ТС] 7
меня больше беспокоит вопрос, в какой момент работы с ComboBox расставлять галочки в checkbox соответствующих, то, что можно при каждом изменении состояния checkbox перезаписывать значения хоть в ini файл, хоть во временную переменную, а перед закрытием программы все складывать в ini файл я уже придумал как сделать, остается как раз вопрос с combobox
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
18.01.2016, 14:45 8
Цитата Сообщение от painless Посмотреть сообщение
в какой момент работы с ComboBox расставлять галочки в checkbox соответствующих
Вот это как раз и нужно делать в OnSelect, которое происходит уже после того, как был сделан выбор пункта в ComboBox-е
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
18.01.2016, 15:46 9
Лучший ответ Сообщение было отмечено painless как решение

Решение

painless, посмотри этот вариант__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
#include <IniFiles.hpp>
    TMemIniFile *myIni=new TMemIniFile(".\\myProg.ini");
    char keys[3], idx;
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    keys[0] = myIni->ReadInteger("Boxes","Keys1",0);
    keys[1] = myIni->ReadInteger("Boxes","Keys2",0);
    keys[2] = myIni->ReadInteger("Boxes","Keys3",0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    myIni->WriteInteger("Boxes","Keys1",keys[0]);
    myIni->WriteInteger("Boxes","Keys2",keys[1]);
    myIni->WriteInteger("Boxes","Keys3",keys[2]);
    myIni->UpdateFile();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
    if((idx=ComboBox1->ItemIndex)>=0)
    {
       CheckBox1->Checked = 1& keys[idx];
       CheckBox2->Checked = 2& keys[idx];
       CheckBox3->Checked = 4& keys[idx];
       CheckBox4->Checked = 8& keys[idx];
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1DropDown(TObject *Sender)
{
    if((idx=ComboBox1->Items->IndexOf(ComboBox1->Text))>=0)
    {
      keys[idx] = 0;
      if(CheckBox1->Checked) keys[idx] |= 1;
      if(CheckBox2->Checked) keys[idx] |= 2;
      if(CheckBox3->Checked) keys[idx] |= 4;
      if(CheckBox4->Checked) keys[idx] |= 8;
    }
}
//---------------------------------------------------------------------------
Использовать обработчик CheckBoxClick для фиксации состояния боксов не рекомендую, потому что он запускается и при установке состояния бокса программным путём. Может получиться путаница.
1
18.01.2016, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2016, 15:46
Помогаю со студенческими работами здесь

Обработчик события для ComboBox
C WPF только знакомлюсь. Возник вопрос как правильно написать обработчик события для ComboBox в С#,...

Отлов события выбора элемента ComboBox
На форме кнопка, с кодом: ComboBox1.ItemIndex := 0; В событии select ComboBox1 есть код, как...

Передача значения переменной из события comboBox
Здравствуйте. помогите пожалуйста реализовать передачу данных из события есть событие comboBox ...

Не правильное генерирование события SelectedValueChanged у Combobox
Объясните мне пожалуйста, почему такое странное поведение у combobox. У меня таблица в БД, которую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru