-2

C++ 生成器 XE8

如果我选择 Num 1 备忘录将显示测试

如果我选择其他项目,备忘录将显示Else Test

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ListBox1->Items->Add("Num 1");
    ListBox1->Items->Add("Num 2");
    ListBox1->Items->Add("Num 3");

    auto str = listBox1->SelectedItem->ToString();
    if (str == L"Num 1") {
        Memo1->Text = "Test";
    }
    else {
        Memo1->Text = "Else Test";
    }
}
4

1 回答 1

0

Form 的OnCreate事件(你不应该在 C++ 中使用,而是使用 Form 的构造函数)太快检测到用户的选择,因为用户还没有机会看到 UI 来选择任何东西。请改用 ListBox 的OnChange事件。

此外,TListBox没有SelectedItem财产。在 FireMonkey(我假设您使用它而不是 VCL)中,它有一个Selected属性。

尝试这个:

__fastcall TForm1::TForm1(TComponent *Owner)
    : TForm(Owner)
{
    ListBox1->BeginUpdate();
    try { 
        ListBox1->Items->Add("Num 1");
        ListBox1->Items->Add("Num 2");
        ListBox1->Items->Add("Num 3");
    }
    __finally {
        ListBox1->EndUpdate();
    }
}

void __fastcall TForm1::ListBox1Change(TObject *Sender)
{
    TListBoxItem *Item = ListBox1->Selected;
    if (Item) {
        String str = ListBox1->Selected->Text;
        if (str == L"Num 1") {
            Memo1->Text = "Test";
        }
        else {
            Memo1->Text = "Else Test";
        }
    }
    else {
        Memo1->Text = "Nothing";
    }
}
于 2015-07-20T19:20:06.260 回答