На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Два comboBox
    ПРИВЕТ Всем !!!

    на form'e 2-ва ComboBox

    в 1. показывается название
    во 2. показывается код (названия)

    как сделать так чтобы:
    они грузились из файла,
    и соответствовали друг другу (название = коду (вводишь одно показывалось второе)).

    и при необходимости можно было ввести новый код и название (сохранить в этом файле).
      Возможно имеется ввиду TValueListEditor на вкладке Additional (CB6) ?
        ???? сейчас гляну...
          ItemIndex-Не пробовал использовать для согласования
          ComboBox1->ItemIndex=ComboBox2->ItemIndex;
          В событии Change
            Вот про TValueListEditor, я совсем недавно писал.
            Компонент этот появился с C++Builder6. Находится на вкладке Additional. Он служит для редактирования списка вида "имя = значение". Например, пользователю требуется для работы программы задать несколько переменных, можно его использовать - в первой колонке будет имя, во второй - вводимое пользователем значение. Надписи на заголовках задаются в свойстве TitleCaptions. По умолчанию - "Key \n Value". Сами данные в свойстве Strings, имеющее тип TStrings. Встроенный редактор этого свойства позволяет все визуально спроектировать. Во время выполнения к ключам и значениям можно добраться через Keys и Values или Cells. Во время выполнения, если разрешено редактирование, пользователь сам может изменять значения, и даже добавлять и удалять (естественно, если такой режим включен). Свойство KeyOptions определяет, какие операции доступны пользователю (во время выполнения) при редактировании колонки имен. Это keyEdit (редактирование имен), keyAdd (добавление новых строк), keyDelete (удаление строк), keyUnique (имена не могут повторяться). Свойство ItemProps позволяет установить параметры редактирования каждого из элементов списка. Это массив, каждый его элемент - типа TItemProp. Он имеет ряд свойств, применимых к каждому элементу: EditMask (маска ввода, так же как и у MaskEdit, как ей пользоваться - здесь: http://bcb-faq.pochta.ru/094.html), EditStyle (стиль редактирования (esSimple (обычное редактирование), esEllipsis (кнопка с многоточием, при нажатии на нее - событие OnEditButtonClick, где можно показывать, например, специальную форму для редактирования значения), esPickList (выпадающий список, для его формирования - OnGetPickList))), ReadOnly (можно ли пользователю изменять значение в самом окне), MaxLength (максимально допустимая длина вводимых символов). Свойства TValueListEditor DisplayOptions и просто Options регулируют различные параметы поведения и отображения.
            :)
              Примерно так:

              ExpandedWrap disabled
                ...
                #include "IniFiles.hpp"
                ...
                //---------------------------------------------------------------------------
                void __fastcall TForm1::FormCreate(TObject *Sender)
                  {
                  // загружаем Combobox'ы из файла bin\pathname.dat
                  TIniFile* ini = new TIniFile(ExtractFilePath(Application->ExeName) + "pathname.dat");
                  TStringList* Titles = new TStringList;
                  TStringList* Path = new TStringList;
                  ini->ReadSectionValues("TITLE", Titles);
                  ini->ReadSectionValues("PATH", Path);
                   for(int i=0; i<Titles->Count; ++i)
                   {
                   ComboBox1->Items->Add(Titles->Values["FileTitle"+IntToStr(i)]);
                   }
                   for(int i=0; i<Path->Count; i++)
                   {
                   ComboBox2->Items->Add(Path->Values["FilePath"+IntToStr(i)]);
                   }
                   ComboBox1->ItemIndex = 0;
                   ComboBox2->ItemIndex=ComboBox1->ItemIndex;
                   delete Titles;
                   delete Path;
                   delete ini;
                   }
                //---------------------------------------------------------------------------
                void __fastcall TForm1::ComboBox1Select(TObject *Sender)
                {
                        ComboBox2->ItemIndex=ComboBox1->ItemIndex;
                }
                //---------------------------------------------------------------------------
                void __fastcall TForm1::ComboBox2Select(TObject *Sender)
                {
                        ComboBox1->ItemIndex=ComboBox2->ItemIndex;
                }
                //---------------------------------------------------------------------------
                void __fastcall TForm1::Button1Click(TObject *Sender)
                {
                        TStringList * List = new TStringList;
                         int f = ComboBox2->ItemIndex; // строка ComboBox'a
                         AnsiString lf = ComboBox2->Items->Strings[f]; // файл, который будем грузить
                         ListBox1->Clear();
                         List->LoadFromFile(lf);   // загружаем в TStringList строки из файла
                        {
                         for(int i=0;i<List->Count;i++)    // бежим по всем строкам
                         ListBox1->Items->Add(List->Strings[i]);  // тогда добавляем в ListBox
                         List->Clear();
                         delete List;
                         }
                         }
                //---------------------------------------------------------------------------

              Не проверял! © trainer
                OLD
                при вводе значения и нажатия Button1 выдает

                cannot open file !!! :'(

                KAV
                СПАСИБО понял, :yes:
                но как добавить значения в файл...

                Bas
                спасибо вроде работает :yes:
                ComboBox1->ItemIndex=ComboBox2->ItemIndex;
                  Для загрузки из файла я бы посоветовал тебе использовать TStringList :), а, зная свой формат хранения данных, ты легко "расщепишь" каждую строку на составные и добавишь в ComboBox'ы (кстати, тут топик рядом с такой же почти задачей, я там даже код привел). Сохранять в файл - опять же считывать эти значения с КомбоБоксов, на этот раз формировать СтрингЛист и писать его в файл. Чтобы пользователь комбобокса :) мог либо выбирать из списка варианты, либо вводить свои - ставь стиль csDropDown.
                    KAV
                    несовсем выходит нет новых записей в файле sss.txt ...
                    :'(

                    Добавлено в :
                    Kav
                    мне надо чтобы
                    после добывки в ComboBox1->Items->Add(ComboBox1->Text);
                    оно записывалось в файл и все

                    а при открыти загружало :)
                      Цитата PsiHo,8.04.04, 07:05
                      OLD
                      при вводе значения и нажатия Button1 выдает cannot open file !!! :'(

                      А его там и нет :D

                      Создай файл в той же директории, что и проект, или, например c:\pathname.dat.
                      Или , или pupkin_lovely_file, или просто pathname.txt, не забыв в таком случае сделать:
                      ExpandedWrap disabled
                        // загружаем Combobox'ы из файла bin\pathname.dat
                        TIniFile* ini = new TIniFile(ExtractFilePath(Application->ExeName) + "pathname.txt");

                      Формат файла:
                      ExpandedWrap disabled
                        ; Названия файлов
                        [TITLE]
                        FileTitle0=Title 1
                        FileTitle1=Title 2
                        ; Пути файлов
                        [PATH]
                        FilePath0=pathname1.txt
                        FilePath1=C:\temp\pathname2.txt //или так


                      И вперед!
                      Сообщение отредактировано: Old -
                        Цитата PsiHo,8.04.04, 10:17
                        после добывки в ComboBox1->Items->Add(ComboBox1->Text);
                        оно записывалось в файл и все
                        а при открыти загружало :)

                        Например, вешаем это на две кнопки.

                        Button1->Click
                        ExpandedWrap disabled
                          ComboBox1->Items->Add(ComboBox1->Text);
                          ComboBox1->Items->SaveToFile("ComboBox1.txt");

                        Button2->Click
                        ExpandedWrap disabled
                          ComboBox1->Items->LoadFromFile("ComboBox1.txt");

                        Где-то так :)
                        Сообщение отредактировано: Old -
                          При добавлении как сделать проверку на одинаковые (избежание повторений)
                          я сделал так:
                          запись:
                          ComboBox1->Items->Add(ComboBox1->Text);
                          ComboBox1->Items->SaveToFile("ComboBox1.txt");
                          ComboBox2->Items->Add(ComboBox2->Text);
                          ComboBox2->Items->SaveToFile("ComboBox2.txt");

                          загрузка:
                          ComboBox1->Items->LoadFromFile("ComboBox1.txt");
                          ComboBox2->Items->LoadFromFile("ComboBox2.txt");

                          :wacko:
                          Сообщение отредактировано: PsiHo -
                            Цитата PsiHo,8.04.04, 20:16
                            избежание повторений

                            Не работает?
                            Так речь, кажись, шла о сравнении элементов, а не об удалении повторов...
                            Или нет?
                              нет OLD все пашет но кто нибудь это знает как сделать.
                                Цитата
                                PsiHo, 8.04.04, 23:16
                                избежание повторений


                                Цитата
                                PsiHo, 9.04.04, 15:31
                                нет OLD все пашет но кто нибудь это знает как сделать

                                Избежание повторений- на уровне СomboBox чтото типа IndexOf?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0360 ]   [ 16 queries used ]   [ Generated: 18.04.24, 15:09 GMT ]