Event TComboBox przy zmiane wartość ItemIndex

0

w poziomu kodu zmieniam index ComboBox'a

ComboBox1.ItemIndex := Random( 5 );

chciał bym, żeby ta zmiana wywołała mi event tegoż comboBoxa( pewnie OnChange ), da się jakoś to zrobić?

2

da się jakoś to zrobić?

Musiałbyś stworzyć własną kontrolkę dziedziczącą po TComboBox i overloadować funkcję SetItemIndex albo po prostu ręcznie wywoływać ten event:

Procedure CallOnChange(const Obj: TComboBox); inline;
Begin
 if (Assigned(Obj.OnChange)) Then
  Obj.OnChange(Obj);
End;

{...}

ComboBox1.ItemIndex := 512;
CallOnChange(ComboBox1);
2

Możesz OnChange wywołać "ręcznie".

  ComboBox1.ItemIndex := Random( 5 );
  ComboBox1Change(Sender);

W zdarzeniu OnChange odczytaj ComboBox1.ItemIndex.

1

Można też zmusić ComboBox aby wywołał to zdarzenie wysyłając odpowiedni komunikat:

ComboBox1.Perform(WM_COMMAND, MakeWParam(0, CBN_EDITCHANGE), ComboBox1.Handle);
0

Wątek przenoszę do Newbie, bo raczej się ze mną zgodzicie, że dotyczy podstaw. A i trochę mnie @TLesiu zasmucił, bo myślałem ze człowiek z takim nickiem jest raczej klasą dziedziczącą po TObject niz typem rekordowym czy wyliczeniowym i taka tematyka jak wywoływanie metod powina mu być znana ;) Ale cóż wybaczam - ja też do niedawna wywoływałem funkcję obsługi wątku w WinAPI bez 'stdcall', dziwiąc się błędnemu przekazaniu do niej parametru. Także człowiek uczy się całe życie. I nikogo nie stygmatyzuje ze względu na nick, jak kiedyś, a może i nadal uważano mnie za osobe w młodym wieku ze względu na nick. Musiałem to btw napisać, bo chciałem wiedzieć jak się postuje z pod Androida i niestety osobie nieprzyzwyczajonej do dotykowej klawiatury trochę ciężko, a poza tym wygodniejsza klawiatura w pozycji horyzontalnej tabletu zasłania uzupełnianie nicków, ale jakoś trzeba z tym żyć :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1