
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
![]() |
|
|
ПРИВЕТ Всем !!!
на form'e 2-ва ComboBox в 1. показывается название во 2. показывается код (названия) как сделать так чтобы: они грузились из файла, и соответствовали друг другу (название = коду (вводишь одно показывалось второе)). и при необходимости можно было ввести новый код и название (сохранить в этом файле). |
Сообщ.
#2
,
|
|
|
Возможно имеется ввиду TValueListEditor на вкладке Additional (CB6) ?
|
Сообщ.
#3
,
|
|
|
???? сейчас гляну...
|
![]() |
Сообщ.
#4
,
|
|
ItemIndex-Не пробовал использовать для согласования
ComboBox1->ItemIndex=ComboBox2->ItemIndex; В событии Change |
Сообщ.
#5
,
|
|
|
Вот про 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 регулируют различные параметы поведения и отображения. ![]() |
Сообщ.
#6
,
|
|
|
Примерно так:
![]() ![]() ... #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 |
Сообщ.
#7
,
|
|
|
OLD
при вводе значения и нажатия Button1 выдает cannot open file !!! ![]() KAV СПАСИБО понял, ![]() но как добавить значения в файл... Bas спасибо вроде работает ![]() ComboBox1->ItemIndex=ComboBox2->ItemIndex; |
Сообщ.
#8
,
|
|
|
Для загрузки из файла я бы посоветовал тебе использовать TStringList
![]() ![]() |
Сообщ.
#9
,
|
|
|
KAV
несовсем выходит нет новых записей в файле sss.txt ... ![]() Добавлено в : Kav мне надо чтобы после добывки в ComboBox1->Items->Add(ComboBox1->Text); оно записывалось в файл и все а при открыти загружало ![]() |
Сообщ.
#10
,
|
|
|
Цитата PsiHo,8.04.04, 07:05 OLD при вводе значения и нажатия Button1 выдает cannot open file !!! ![]() А его там и нет ![]() Создай файл в той же директории, что и проект, или, например c:\pathname.dat. Или , или pupkin_lovely_file, или просто pathname.txt, не забыв в таком случае сделать: ![]() ![]() // загружаем Combobox'ы из файла bin\pathname.dat TIniFile* ini = new TIniFile(ExtractFilePath(Application->ExeName) + "pathname.txt"); Формат файла: ![]() ![]() ; Названия файлов [TITLE] FileTitle0=Title 1 FileTitle1=Title 2 ; Пути файлов [PATH] FilePath0=pathname1.txt FilePath1=C:\temp\pathname2.txt //или так И вперед! |
Сообщ.
#11
,
|
|
|
Цитата PsiHo,8.04.04, 10:17 после добывки в ComboBox1->Items->Add(ComboBox1->Text); оно записывалось в файл и все а при открыти загружало ![]() Например, вешаем это на две кнопки. Button1->Click ![]() ![]() ComboBox1->Items->Add(ComboBox1->Text); ComboBox1->Items->SaveToFile("ComboBox1.txt"); Button2->Click ![]() ![]() ComboBox1->Items->LoadFromFile("ComboBox1.txt"); Где-то так ![]() |
Сообщ.
#12
,
|
|
|
При добавлении как сделать проверку на одинаковые (избежание повторений)
я сделал так: запись: 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"); ![]() |
Сообщ.
#13
,
|
|
|
Цитата PsiHo,8.04.04, 20:16 избежание повторений Не работает? Так речь, кажись, шла о сравнении элементов, а не об удалении повторов... Или нет? |
Сообщ.
#14
,
|
|
|
нет OLD все пашет но кто нибудь это знает как сделать.
|
![]() |
Сообщ.
#15
,
|
|
Цитата PsiHo, 8.04.04, 23:16 избежание повторений Цитата PsiHo, 9.04.04, 15:31 нет OLD все пашет но кто нибудь это знает как сделать Избежание повторений- на уровне СomboBox чтото типа IndexOf? |
Сообщ.
#16
,
|
|
|
Чтобы избежать повторений надо данные заносить в TStringList, предварительно у него установив Sorted = True и Duplicate = dupIgnore
|
Сообщ.
#17
,
|
|
|
Да, это же еще надо удалить повторяющийся алимент...
Как бы так (без изысков с файлом типа ini и всяких там других box'ов и stringlist'ов (простите меня, за последнее, уважаемый KAV ![]() Создаем два файла ComboBox1.txt и ComboBox2.txt Файл ComboBox1.txt ![]() ![]() Title 1 Title 2 Повторяющийся элемент ComboBox'ов Еще один повторяющийся элемент ComboBox'ов Файл ComboBox2.txt ![]() ![]() pathname1.txt C:\temp\pathname2.txt Повторяющийся элемент ComboBox'ов Еще один повторяющийся элемент ComboBox'ов Пишем: ![]() ![]() ... //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { ComboBox1->Items->LoadFromFile("ComboBox1.txt"); ComboBox2->Items->LoadFromFile("ComboBox2.txt"); } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox1Select(TObject *Sender) { ComboBox2->ItemIndex=ComboBox1->ItemIndex; // сравнение элементов if (ComboBox1->Text.Pos(ComboBox2->Text)) ShowMessage("Ай-я-яй!\nНа этот раз Вам не удалось избежать повторений в ComboBox'ax!"); else ShowMessage("Повторений в ComboBox'ax нет."); } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox2Select(TObject *Sender) { ComboBox1->ItemIndex=ComboBox2->ItemIndex; // сравнение элементов if (ComboBox1->Text.Pos(ComboBox2->Text)) ShowMessage("Ай-я-яй!\nВам снова не удалось избежать повторений в ComboBox'ax!"); else ShowMessage("Повторений в ComboBox'ax нет."); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ComboBox1->Items->Add(ComboBox1->Text); // добавляем текст ComboBox1->Items->SaveToFile("ComboBox1.txt"); // записываем в файл } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { ComboBox2->Items->Add(ComboBox2->Text); // добавляем текст ComboBox2->Items->SaveToFile("ComboBox2.txt"); // записываем в файл } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { int i; i = ComboBox1->Items->IndexOf(ComboBox2->Text); if (i >= 0) ComboBox1->Items->Delete(i); ComboBox1->ItemIndex = 0; // удаляем элемент ComboBox'a { ComboBox1->Items->SaveToFile("ComboBox1.txt"); // записываем в файл } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { int i; i = ComboBox2->Items->IndexOf(ComboBox1->Text); if (i >= 0) ComboBox2->Items->Delete(i); ComboBox2->ItemIndex = 0; // удаляем элемент ComboBox'a { ComboBox2->Items->SaveToFile("ComboBox2.txt"); // записываем в файл } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { int i; i = ComboBox1->ItemIndex; if (i >= 0) ComboBox1->Items->Delete(i); ComboBox1->ItemIndex = 0; { ComboBox1->Items->SaveToFile("ComboBox1.txt"); // записываем в файл } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button6Click(TObject *Sender) { int i; i = ComboBox2->ItemIndex; if (i >= 0) ComboBox2->Items->Delete(i); ComboBox2->ItemIndex = 0; { ComboBox2->Items->SaveToFile("ComboBox2.txt"); // записываем в файл } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button7Click(TObject *Sender) { int ix; ix = ComboBox1->Items->IndexOf(ComboBox2->Text); if (ix >= 0) ComboBox1->Items->Delete(ix); // если есть повтор ComboBox1->ItemIndex = 0; // удаляем элемент ComboBox'a { ComboBox1->Items->SaveToFile("ComboBox1.txt"); // записываем в файл } { int iy; iy = ComboBox2->Items->IndexOf(ComboBox1->Text); if (iy >= 0) ComboBox2->Items->Delete(ix); // если есть повтор ComboBox2->ItemIndex = 0; // удаляем элемент ComboBox'a { ComboBox2->Items->SaveToFile("ComboBox2.txt"); // записываем в файл } } } //--------------------------------------------------------------------------- Теперь в любом ComboBox'e выбираем Повторяющийся элемент ComboBox'ов, и ждем сообщения ![]() Вариант ComboBox2Select->ShowMessages не смог проверить, поскольку у меня было установлено ![]() ![]() ComboBox2->Enabled = false ![]() |
Сообщ.
#18
,
|
|
|
Спасибо ДОШЛО
|
Сообщ.
#19
,
|
|
|
А вообще-то можно обрабатывать и так:
![]() ![]() void __fastcall TForm1::ComboBox1Select(TObject *Sender) { ComboBox2->ItemIndex=ComboBox1->ItemIndex; if (ComboBox1->Text.Pos(ComboBox2->Text)) { if (Application->MessageBox( "Ай-я-яй!\nОбнаружены совпадения в ComboBox'ax!\nУдалить элемент!", "Проверка сопадений", MB_OK + MB_ICONWARNING)) { ComboBox1->Items->Delete(ComboBox1->ItemIndex);// удаляем элемент ComboBox'a ComboBox1->ItemIndex = 0; } } else Application->MessageBoxA("Совпадений в ComboBox'ax нет.", "Проверка совпадений", MB_ICONASTERISK); } |
Сообщ.
#20
,
|
|
|
![]() ![]() ![]() что за такое невыходит повторения есть ![]() ![]() ![]() |
Сообщ.
#21
,
|
|
|
PsiHo, почитай #16
|
Сообщ.
#22
,
|
|
|
Song
читал при использовании Sorted = True получается что когда ты нажал на кнопку оно отсортировало (ну это и понятно) а мне данное действие не подходит... а насчет Duplicate = dupIgnore Где оно что найти не могу может покажешь (и просьба пиши поподробнее) ![]() |
Сообщ.
#23
,
|
|
|
Цитата PsiHo, 13.04.04, 12:46 а насчет Duplicate = dupIgnore Где оно что найти не могу может покажешь (и просьба пиши поподробнее) оно у TStringList. Но без Sorted оно работать не будет. |
Сообщ.
#24
,
|
|
|
Цитата PsiHo @ 13.04.04, 06:19 ![]() ![]() ![]() что за такое невыходит повторения есть ![]() ![]() ![]() Так оно ж должно удаляться при нажатии кнопочки... Речь по-прежнему идет о сравнении двух ComboBox: ![]() ![]() ComboBox2->ItemIndex=ComboBox1->ItemIndex; В таком случае, если все это начать сортировать... Например, если в ComboBox1 после последнего итема на я добавить итем на а и отсортировать... Он же из последнего станет первым, и что тогда с чем сравнивать. Ну да, если вводить в оба бокса две идентичные строки, и потом сортировать, и отлавливать совпадения... Но это уже садомазохизм какой-то получается... И что-то мне очень сильно кажется, что Sorted = True Duplicate = dupIgnore не буде сортировать и сравнивать элементы в двух ComboBox... |
Сообщ.
#25
,
|
|
|
Old,
1) перед занесением элемента в любой список прогоняй его через TStringList. 2) Постоянно храни данные в TStringList, а после добавления просто ассигни на TComboBox.Items 3) Обрабатывай циклом в конце концов, удаляя всё вручную.. Удивлён, что такой вопрос столь долго обсуждается. |
Сообщ.
#26
,
|
|
|
Song
а што ты хотел чтобы все вопросы решался мигом или как... а насчет: Sorted = True Duplicate = dupIgnore поставил, но нефига не выходит p.s. может сам побыстрому напишеш, ась... Old да, речь идет по-прежнему о сравнении, а потом и добавке двух combobox'ов ComboBox2->ItemIndex=ComboBox1->ItemIndex; ё - мае: дык, как сделать... |
Сообщ.
#27
,
|
|
|
Цитата PsiHo, 15.04.04, 15:33 а што ты хотел чтобы все вопросы решался мигом именно. После того как поставил Sorted = True и Duplicate = dupIgnore добавляй в список две одинаковых строки. Увидишь, что вторая не добавится. |
Сообщ.
#28
,
|
|
|
Song
я же это уже писал читай #26 Цитата PsiHo, 15.04.04, 11:33 а насчет: Sorted = True Duplicate = dupIgnore поставил, но нефига не выходит напиши как именно по твоему ( ![]() |
Сообщ.
#29
,
|
|
|
Мда.. тяжёлый случай..
Хочешь на Дельфи? |
Сообщ.
#30
,
|
|
|
можна
а случай тяжёлый (даже очень ) ![]() ![]() ![]() |
Сообщ.
#31
,
|
|
|
Выполни вот это код:
![]() ![]() With TStringList.Create Do try Sorted:=True; Duplicates:=dupIgnore; Add('String1'); Add('String1'); Add('String2'); Add('А теперь убедитесь что над этой надписью две строки,а не три!'); ShowMessage(Text); finally Free; end; |
Сообщ.
#32
,
|
|
|
Цитата Song @ 15.04.04, 18:43 Duplicates:=dupIgnore; А мы искали в ComboBox'ax ![]() А оно типа в массивах ![]() |
Сообщ.
#33
,
|
|
|
Я же сказал, что добавлять нужно в TStringList, а потом ассигнить на TComboBox.Items.
Само собой в TComboBox такого нет, т.к. там контейнер - TStrings, а не TStringList. Ребят, вы хоть читайте что я пишу в постах. |
Сообщ.
#34
,
|
|
|
гы
![]() ![]() ![]() Добавлено в : Спасибо !!! наконец то решили, надеюсь (еще не проверял) |
Сообщ.
#35
,
|
|
|
Если б ты читал чего тебе пишут, "наконец-бы" было уже давно.
|
Сообщ.
#36
,
|
|
|
это что же именно я не читал
![]() Добавлено в : я же говорил и говорю еще раз пишите по подробнее я еще не спец ![]() |
Сообщ.
#37
,
|
|
|
Сообщ.
#38
,
|
|
|
Цитата Song @ 16.04.04, 13:59 Все возвращается на круги своя... ![]() |
Сообщ.
#39
,
|
|
|
Song
и что ты этим хочеш сказать ![]() что за прикол покавывать мне ссылки моих же тем ![]() |
Сообщ.
#40
,
|
|
|
PsiHo, эта ссылка не на тему, а на посты, о которых я говорил. (Ты нажать-то пробовал) ?
|
Сообщ.
#41
,
|
|
|
и что нажал и тогда жал открывается и показывает
... ![]() |
Сообщ.
#42
,
|
|
|
Забей..
|
Сообщ.
#43
,
|
|
|
Наверное, проще юзать TStringList и ейный метод Equals.
Или Цитата Song 17.04.04, 14:26 Забей.. |
Сообщ.
#44
,
|
|
|
Всем учасмвующим в данном топике
СПАСИБО ОГРОМНОЕ в особености Old и ... Админу Song ты супер ![]() ![]() ![]() |