Show/Add 一个项目 from/to C++ Builder XE8 中的一些组合框
Show/Add an Item from/to Some ComboBoxs in C++ Builder XE8
我需要你的帮助来解决我的 2 个问题。
我正在使用 3 个组合框 (CB)。当从第一个CB中选择一个项目时,第二个和第三个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" 属性 正常工作。换句话说,第 2 和第 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);
等等...
所以我的问题是:如何通过 "Text" 选项使它在 C++ Builder XE8 上运行真的像 Delphi 上的那样?
非常感谢您的帮助。
关于您的第一个问题:您可能在 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
我需要你的帮助来解决我的 2 个问题。
我正在使用 3 个组合框 (CB)。当从第一个CB中选择一个项目时,第二个和第三个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" 属性 正常工作。换句话说,第 2 和第 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);
等等...
所以我的问题是:如何通过 "Text" 选项使它在 C++ Builder XE8 上运行真的像 Delphi 上的那样?
非常感谢您的帮助。
关于您的第一个问题:您可能在 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