c++ - 在 C++ Builder XE8 中从/向某些组合框显示/添加项目

标签 c++ delphi combobox c++builder

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

我正在使用 3 个组合框 (CB)。当从第一个 CB 选择一个项目时,第二和第三个 CB 的项目将自动出现。

在 Delphi 上,所有设置都可以通过“文本”属性很好地工作。

第一个 CB 包含:

Google
Yahoo

第二个 CB 包含:

8.8.8.8
9.9.9.9

第三个 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 上,它无法通过“文本”属性正常工作。换句话说,第二个和第三个 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); 等等……

所以我的问题是:如何像在 Delphi 上一样通过“文本”选项使其在 C++ Builder XE8 上运行?

非常感谢您的帮助。

最佳答案

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

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

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

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

关于c++ - 在 C++ Builder XE8 中从/向某些组合框显示/添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31298510/

相关文章:

c++ - phoenix::lambda函数的执行顺序是怎样的?

c++ - 基类中的私有(private)静态成员

c++ - 在 Objective-C 中,如何将方法转发给特定的父类(super class)

delphi - 使用 FIREDAC 创建表 MS ACCESS

mysql - 如何获取MySql数据库中所有列名显示在comboBox中

c++ - 模板扣: porting to C++11

delphi - 如何解决 Delphi 无法准确处理日期时间操作的问题?

德尔菲 : EEncodingError - Invalid code page on windows xp embedded

c# 组合框绑定(bind)到对象列表

c++ - Gtkmm:创建一个列出 Gtk::DrawingArea 的 Gtk::ComboBox