Показать стоимость предметов в памятке

C++ Builder XE8

если я выберу Num 1 Memo покажет 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";
    }
}

1 ответ

Форма OnCreate Событие (которое НЕ СЛЕДУЕТ использовать в C++, используйте вместо этого конструктор Form) слишком рано, чтобы обнаружить выбор пользователя, так как у пользователя еще не было возможности увидеть пользовательский интерфейс, чтобы что-то выбрать. Используйте ListBox's 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";
    }
}
Другие вопросы по тегам