Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
19 / 19 / 4
Регистрация: 28.04.2013
Сообщений: 139
1

Управление компонентами формы в зависимости от выбора в ComboBox

02.05.2015, 10:24. Показов 3174. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый! Сразу к вопросу.
После запуска программы, появляется окно с вводом данных(Form1), на окне присутствует ComboBox1(в нем строки с числами от 1 до 15)
Необходимо: чтобы при выборе - (пример) значения 7 в ComboBox1, на Form2 становились видимыми,доступными, или же создавались компоненты : A1:A7, B1:B7, C1:C7 и D1: D7 (Где, A-Combobox(7шт), B,C,D -Edit'ы в том же кол-ве).
В свою очередь, если в B1-B7, C1-C7 и D1-D7, введены значения (значения не будут введены во все Edit'ы, поэтому изначально значение каждого равно=0), вычислить сумму групп A,C,D по отдельности.
-------------------------------------------------------------------------------------------------------------------------------------------
В общем встрял прямо на первом этапе, а именно : при выборе значения в ComboBox1 =7, показать элементы A1:A7,B1:B7,C1:C7 и D1: D7. Как то аккуратненько это можно сделать?
Прописывать { Form2->A1(а так же B1,C1,D1)->Visible=true;} для каждого тоже думаю не вариант
-------------------------------------------------------------------------------------------------------------------------------------------
Т.К. кроме этих Edit'ов на форме других нет, присвоил сразу значение 0, для каждого
C++
1
2
3
4
5
6
7
for(int i = 0; i < ComponentCount; i++)
 {
   TEdit* edit;
   edit = dynamic_cast<TEdit*>(Components[i]);
   if(edit)
   edit->Text = "0";
 }
Можно ли как нить так же прописать, чтобы суммировались лишь те Edit'ы, значения которых >0, т.к., с Языком я дружу плохо, мой расчет выглядит так : a1+a2+a3....+An , b1+b2+b3...Bm итд.
-------------------------------------------------------------------------------------------------------------------------------------------

Добавлено через 19 минут
Так же интересует:
Как при выборе в ComboBox[i] файла формата .ini, хранящего в себе данные ,загружать сразу при выборе либо после нажатия на кнопку(Кол-во файлов постепенно пополняется, список в ComboBox изменяется). Либо какой то иной способ загрузки .ini файла.
C++
1
Edit1->Text = Ini->ReadString("Edits","Edit1","Def");
Знаю только как загрузить .ini из ранее указанного файла в коде программы.
C++
1
TForm1 *Form1; TIniFile *Ini = new TIniFile("c:/file.ini");
Добавлено через 16 минут
Одним из конечных результатов является: вывод отчета(FastReport).

Добавлено через 18 часов 59 минут
Можно ли в общем, как нибудь группировать компоненты?
Ну или как реализовать,чтобы при выборе на Form2 , в ComboBox j-ой строки, соблюдалось условие
C++
1
2
Edit[2]->Text=Edit[1]->Text;
Edit[3]->Text=="Нет";
При этом, если в ComboBox значение изменили на i-ую строку, то соблюдалось только условие
C++
1
2
Edit[3]->Text=Edit[2]->Text;
Edit[1]->Text=="Нет" ,
И третье ComboBox с k-той строкой, то
C++
1
2
Edit[3]->Text=Edit[1]->Text;
Edit[2]->Text=="Нет" ,
Все эти условия должны касаться 15 combobox'ов.
Писал так
C++
1
2
if (ComboBox1->...)
{Edit3->Text=Edit1->Text; Edit2->Text=="нет";} // в этом случае копирование вводимого значения в Edit совершалось, но найти как записать условие для остальных вариантов так и не смог, так как при смене значения в Editе (уникальных-3) необходимо менять условие (на одно из 2х других)
Всего на Form2: 18 Label, 15 ComboBox, 45 Edit'ов. (1 ComboBox отвечает за 3 Edit'а)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2015, 10:24
Ответы с готовыми решениями:

Вывод списка в ComboBox зависимости от выбора в другом ComboBox. C++
Вывод списка в ComboBox зависимости от выбора в другом ComboBox. Например, студент выбирает...

Управление компонентами формы из Main()
Всем доброго времени суток! Объясните плз как можно в static void Main() управлять элементами формы...

Управление видимостью объекта в зависимости от выбора RadioButton
как сделать, чтобы когда ставим флажок элемент на форме скрывался, а когда убираем флажок элемент...

Автозаполнение таблицы в зависимости от выбора в ComboBox
Здравствуйте! Только начинаю работать с VBA в Excel. Помогите пожалуйста написать код на основе...

27
19 / 19 / 4
Регистрация: 28.04.2013
Сообщений: 139
03.05.2015, 14:26  [ТС] 21
Author24 — интернет-сервис помощи студентам
Большое спасибо за интересную информацию, попробую вникнуть и разобраться с вложенным вами кодом
P.S. скоро вернусь с новыми ошибками ))

Добавлено через 54 минуты
Такс, с этим кодом :
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
int selected_set( StrToIntDef( cbb_set_select->Items->Strings[ cbb_set_select->ItemIndex ], 0 ) );
 
    if ( selected_set < 0 )
    {
        return;
    }

разобрался, и вклеил успешно.
И благодаря вам, теперь знаю, как высчитывать и каждый столбец по отдельности ( и все вместе - идеально подойдет для задач нахождения "всего" ).
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
for ( int i( 0 ), i_limit( edit_sets[ visible_set ].edits.size( ) ); i < i_limit; ++i )
        {
            summ += StrToIntDef( edit_sets[ visible_set ].edits[ i ][ 1 ]->Text, 0 );
            /*for ( int j( 0 ), j_limit( edit_sets[ visible_set ].edits[ i ].size( ) ); j < j_limit; ++j )
            {
                summ += StrToIntDef( edit_sets[ visible_set ].edits[ i ][ j ]->Text, 0 );
            }*/
        }

Теперь застрял на 1 коде, который отвечает за кол-во создаваемых компонентов
C++
1
2
3
for ( int i( 0 ), i_limit( 15 ); i < i_limit; ++i ) 
    {
        for ( int j( 0 ), j_limit( 3 ); j < j_limit; ++j )
Понял,что при изменении значений i (x) или i_limit(y), можно менять кол-во создаваемых компонентов, при i(5) i_limit(15), получаем вариант 10 10 10 и наоборот при i(0) i_limit(10), получаем опять же вариант 10 10 10, какой же из них является более правильным? если вообще является)
Как на них воздействовать (полагаю по логике, это должно звучать примерно так :" при увеличении ItemIndex на [k], увеличивается значение в цикле на [k] (i(0) ++i) или цикл просто как то надо подставить правильно?), и можно ли как то избежать нажатия на кнопку "btn_add_set" многократного кол-ва раз для получения нужного значения в списке (сам по себе список может быть и ограничен в значениях, к примеру от 1 до 20,30, не страшно)

Добавлено через 12 минут
Так же пытаюсь сменить
C++
1
ShowMessage( IntToStr( summ ) );
на EditSUM->Text =( IntToStr( summ ) );
Меня начинает билдер матюкать о незнании Edit'a / Label'a , разницы в компоненте мне нет
0
19 / 19 / 4
Регистрация: 28.04.2013
Сообщений: 139
03.05.2015, 16:15  [ТС] 22
В общем, если кидаю на форму Edit ( с любым названием) или Label, выдает ошибку и не запускается программа. Без них все функционирует отрадно, но мне нужен вывод результата по 3м столбцам в отдельные компоненты, Edit,Label итд.
Управление компонентами формы в зависимости от выбора в ComboBox
0
19 / 19 / 4
Регистрация: 28.04.2013
Сообщений: 139
05.05.2015, 14:35  [ТС] 23
Актуально,не проходите мимо) Буду рад помощи добрых людей
0
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
05.05.2015, 14:47 24
Не вникал в код, из того что понял - у вас два вложенных цикла, видимо идет обработка двухмерных массивов.
0
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,064
05.05.2015, 20:35 25
Цитата Сообщение от Access12 Посмотреть сообщение
В общем, если кидаю на форму Edit
ты их тоже динамически создай
0
19 / 19 / 4
Регистрация: 28.04.2013
Сообщений: 139
05.05.2015, 21:01  [ТС] 26
Цитата Сообщение от Samrisbe Посмотреть сообщение
ты их тоже динамически создай
Просто для суммы мне нужно всего 3 Edita, кол-во этих Edit'ов на всем пути остается неизменным, каким бы не было условие,не экономнее ли создать 3 статич. Edita под вывод суммы каждого столбца?
Вот только почему то не получается вывести сумму,только в оригинальном варианте с ShowM.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm3::btn_summ_allClick( TObject * Sender )
{
 
    if ( visible_set >= 0 )
    {
        int summ( 0 );
        for ( int i( 0 ), i_limit( edit_sets[ visible_set ].edits.size( ) ); i < i_limit; ++i )
        {
            for ( int j( 0 ), j_limit( edit_sets[ visible_set ].edits[ i ].size( ) ); j < j_limit; ++j )
            {
                summ += StrToIntDef( edit_sets[ visible_set ].edits[ i ][ j ]->Text, 0 );
            }
        }
        ShowMessage( IntToStr( summ ) );
    }
}

Хотел что-то похожее на
C++
1
 EditSUM->Text = ( IntToStr( summ ) );
но ругается на незнания компонента.
//-------------------------------------------------------------------------------
В случае с 1 вариантом динамического создания ,вывод суммы функционирует, компонент устраивает билдер
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int Sum = 0;
 
  for (int i=0;i<Panel1->ControlCount;i++)
    {
     if ((String)Panel1->Controls[i]->ClassName() == L"TEdit")
     {
      if (((TEdit*)Panel1->Controls[i])->Text!=0)
      {
       Sum+= StrToInt(((TEdit*)Panel1->Controls[i])->Text);
      }
     }
    }
    EditSUM->Text = IntToStr(Sum);
}

//В обоих случаях: формы,название компонентов -разные.
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.05.2015, 22:24 27
Цитата Сообщение от Access12 Посмотреть сообщение
В случае с 1 вариантом динамического создания ,вывод суммы функционирует, компонент устраивает билдер
Ну так воспользуйся этим Вариантом
0
19 / 19 / 4
Регистрация: 28.04.2013
Сообщений: 139
05.05.2015, 22:32  [ТС] 28
Цитата Сообщение от Sasha Посмотреть сообщение
Ну так воспользуйся этим Вариантом
Век живи-век учись, будут гореть сроки-воспользуюсь первым, найдется ответ с векторами, еще лучше.
Лишним не будет, да и запустив оба варианта, наглядно видно, что работают то они по разному.
В любом случае спасибо за первый вариант и за отклик в моей теме, более менее разобрался с вашим примером, а вот с векторами глухо,что подогревает еще больший интерес к ним =)
0
05.05.2015, 22:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2015, 22:32
Помогаю со студенческими работами здесь

Заблокировать textBox в зависимости от выбора ComboBox
До выбора строки в ComboBox textbox заблокирован, если в combobox выбрано необходимое значение...

Фильтрация в combobox в зависимости от выбора значения
Добрый вечер. Во вложении файл. Необходима помощь в решении следующей проблемы: Существует лист...

Фильтрация данных в зависимости от выбора в ComboBox
Помогите организовать поиск(фильтрацию)во второй вкладке Combobox результат вывести в...

Вывод в datagridview в зависимости от выбора в combobox
Доброго времени суток. Заранее прошу прощения если ошибся темой. В общем суть проблемы такова: есть...


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

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