在C ++ Builder XE8中向/向某些ComboBox显示/添加项目

时间:2015-07-08 16:31:25

标签: c++ delphi combobox c++builder

我需要你的帮助来解决我的两个问题。

我使用3个ComboBoxs(CB)。从第一CB中选择项目时,则选择第二项和第二项。第3个CB会自动出现。

在Delphi上,所有设置都可以通过" Text"属性。

第一CB包含:

Google
Yahoo

第二届CB包含:

8.8.8.8
9.9.9.9

第3 CB包含:

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上,通过" Text"它无法正常工作。属性。换句话说,第二&第3个CB的项目不会通过" Text"属性。

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,通过" Text"选项真的像Delphi一样吗?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

关于您的第一个问题:您可能在Delphi和C ++ Builder中的Combobox上没有相同的Style属性。将其设置为csDropDown可让您指定文字,但csDropDownList不会。

现在,ItemIndex是一个整数属性,因此不需要调用IntToStr。它不应该编译,因为你不能将文本分配给整数变量,而在XE5中至少它不会。如果它以后工作,那一定是因为UnicodeString有operator int()或类似的,虽然我没有在最新文档中找到它。

关于第二个问题:Add()将传递的字符串添加到列表的末尾。如果你想在特定的位置插入字符串,那么你需要调用Insert()来询问你插入它的位置,在你的情况下它会是0.这当然假设StringList不是排序。

以下是TStrings的文档:http://docwiki.embarcadero.com/Libraries/XE5/en/System.Classes.TStrings