-2

C++ ビルダー XE8

Num 1 メモを選択するとTestが表示されます

他のアイテムを選択すると、メモに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

フォームのOnCreateイベント (C++ では使用しないでください。代わりにフォームのコンストラクターを使用してください) は、ユーザーの選択を検出するのが早すぎます。これは、ユーザーがまだ UI を表示して何かを選択する機会がないためです。代わりにListBox のOnChangeイベントを使用してください。

また、プロパティTListBoxを持っていません。SelectedItemFireMonkey (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 に答える