Показать / добавить элемент из / в некоторые ComboBox в C ++ Builder XE8

1

Мне нужна ваша помощь для решения моих 2 проблем.

Я использую 3 ComboBoxs (CB). При выборе предмета из 1-го ЦБ автоматически появляется позиция 2-го и 3-го ЦБ.

В Delphi все настройки работают так хорошо через свойство "Текст".

1-й ЦБ содержит:

Google
Yahoo

Второй ЦБ содержит:

8.8.8.8
9.9.9.9

3-й ЦБ содержит:

8888
9999

Ниже мой код на Delphi:

procedure TForm.1stCBChange(Sender: TObject);
begin
 if 1stCB.Text  = 'Google' then begin
    2ndCB.Text := '8.8.8.8';
    3rdCB.Text := '8888';
 end else
 if 1stCB.Text  = 'Yahoo' then begin
    2ndCB.Text := '9.9.9.9';
    3rdCB.Text := '9999';
 end;
end;

Проблема в том, что на C++ Builder XE8 он не работает должным образом через свойство "Текст". По другим словам, элемент 2-го и 3-го CB не отображается через свойство "Текст".

void __fastcall TForm::1stCBChange(TObject *Sender)
{
  if (1stCBChange->Text == "Google")
   {
     2ndCB->Text = "8.8.8.8";
     3rdCB->Text = "8888";
   }
  else 
  if (1stCBChange->Text == "Yahoo")
   {
     2ndCB->Text = "9.9.9.9";
     3rdCB->Text = "9999";
   }
}

Чтобы заставить его работать, мне нужно использовать свойство ItemIndex.

void __fastcall TForm::1stCBChange(TObject *Sender)
{
  if (1stCBChange->ItemIndex == 0)
   {
     2ndCB->ItemIndex = IntToStr(0); 
     // or 2ndCB->ItemIndex = 0;
     3rdCB->ItemIndex = IntToStr(0);
   }
  else 
  if (1stCBChange->ItemIndex == 1)
   {
     2ndCB->ItemIndex = IntToStr(1);
     3rdCB->ItemIndex = IntToStr(1);
   }
}

Я пробовал несколько способов, но не работает, например 2ndCB->Items->Objects[1] = (TObject*) new String("8.8.8.8"); или 2ndCB->Items->AddObject("8.8.8.8",2ndCB); так далее и далее...

Итак, мой вопрос: как заставить его работать на C++ Builder XE8 через опцию "Текст", как на Delphi?

Большое спасибо за Вашу помощь.

  • 0
    Какой == используется при сравнении строки delphi и строки C? Могу поспорить, что строка delphi преобразуется в строку C, а затем сравнивается указатели.
  • 0
    Кстати, вы должны задавать один вопрос за раз. Вы спросили два.
Показать ещё 4 комментария
Теги:
combobox
c++builder

1 ответ

3
Лучший ответ

О вашей первой проблеме: вы, вероятно, не имеете того же свойства Style в Combobox в Delphi и С++ Builder. Установка csDropDown позволяет указать текст, но csDropDownList нет.

Теперь ItemIndex является целочисленным свойством, поэтому вызов IntToStr не требуется. Он не должен даже компилироваться, так как вы не можете назначить текст целочисленной переменной, а в XE5 по крайней мере это не так. Если он работает позже, это должно быть потому, что для UnicodeString существует operator int() или аналогичный, хотя я не нашел его в последней документации.

О вашей второй проблеме: Add() добавляет переданную строку в конец списка. Если вы хотите вставить строку в определенную позицию, тогда вам нужно вызвать Insert() котором вам будет предложено ввести ее, в вашем случае это будет 0. Это, конечно, предполагает, что StringList не отсортирован.

Вот документация для TStrings: http://docwiki.embarcadero.com/Libraries/XE5/en/System.Classes.TStrings

  • 0
    Решено. Кстати, это действительно не может быть точно такой же простой синтаксис Delphi. Но все было сделано таким образом: if (Host->ItemIndex == Host->Items->IndexOf("Google")) так далее ... Спасибо всем.
  • 0
    Не существует "автоматического преобразования из UnicodeString в целое число".
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню