Мне нужна ваша помощь для решения моих 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?
Большое спасибо за Вашу помощь.
О вашей первой проблеме: вы, вероятно, не имеете того же свойства 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
if (Host->ItemIndex == Host->Items->IndexOf("Google"))
так далее ... Спасибо всем.
==
используется при сравнении строки delphi и строки C? Могу поспорить, что строка delphi преобразуется в строку C, а затем сравнивается указатели.