Event ob spremembi ItemIndex-a v TComboBox-u

Vse kar vas zanima glede komponent.
Odgovori
Betix
Prispevkov: 339
Pridružen: 17.05.2001 19:54:54
Kraj: Ljubljana

Event ob spremembi ItemIndex-a v TComboBox-u

Odgovor Napisal/-a Betix » 02.12.2009 16:27:12

Kaka ideja, kako narest event, da se bo prožil vsakič, ko se bo spremenil ItemIndex v TComboBoxu? Namreč če ga programsko spremenim, se event OnSelect ne proži (samo če ga kot uporabnik spremenim, torej če kliknem na nek element).
There are only 10 types of people - those, who understand binary, and those, who don't ..

Uporabniški avatar
Lee_Nover
Prispevkov: 3653
Pridružen: 20.05.2001 14:31:55

Event ob spremembi ItemIndex-a v TComboBox-u

Odgovor Napisal/-a Lee_Nover » 02.12.2009 17:50:03

ne programiraj preko eventov ampak napisi metodo, ki jo bo ta event klical, "rocno" jo pa poklices v drugih primerih .. ane
Zadnjič spremenil Lee_Nover, dne 02.12.2009 17:51:27, skupaj popravljeno 1 krat.
.. my 2 c ..
- I hate noobs -

Betix
Prispevkov: 339
Pridružen: 17.05.2001 19:54:54
Kraj: Ljubljana

Event ob spremembi ItemIndex-a v TComboBox-u

Odgovor Napisal/-a Betix » 02.12.2009 22:11:28

Sorry, ne razumem... primer?

Drugače sem sedaj tako naredil, da ko "ročno" spremenim ItemIndex, tudi ročno pokličem OnSelect event... sam to mi ni všeč, ker če bom kje v kodi to pozabil narest, bodo bugi.
There are only 10 types of people - those, who understand binary, and those, who don't ..

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Event ob spremembi ItemIndex-a v TComboBox-u

Odgovor Napisal/-a Runner » 03.12.2009 08:27:41

Koda: Izberi vse

  
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  DoOnIndexChange;
end;

procedure TForm1.DoOnIndexChange;
begin
  // your change code
end;
Sedaj lahko kličeš DoOnIndexChange tudi od drugje. In ja tako kot si zdaj naredil, da ročno kličeš event, se ne dela.

Betix
Prispevkov: 339
Pridružen: 17.05.2001 19:54:54
Kraj: Ljubljana

Event ob spremembi ItemIndex-a v TComboBox-u

Odgovor Napisal/-a Betix » 03.12.2009 13:53:24

Hm, zdaj mi je še manj jasno :)

OK še enkrat: TComboBox ima 2 eventa, OnChange in OnSelect. Glede na to, da uporabljam csDropDownList, mi OnChange nič ne pomaga, ker se nikoli ne kliče. V poštev pride samo OnSelect, ki se kliče samo takrat, ko uproabnik klikne in izbere nek nov element, ne pa tudi takrat, ko jaz iz kode spremenim ItemIndex.

Kar jaz hočem, je to, da se kliče neka moja metoda vsakič, ko se spremeni ItemIndex (ne glede na to, al se je spremenil iz kode ali pa se je spremenil tako, da ga je uporabnik spremenil).
There are only 10 types of people - those, who understand binary, and those, who don't ..

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Event ob spremembi ItemIndex-a v TComboBox-u

Odgovor Napisal/-a odisej » 04.12.2009 08:25:44

Nadgradiš recimo ta combo, mu dodaš metodo MySetItemIndex in v tej metodi zamenjaš item index, pa še kličeš DoOnSelect ali nekaj podobnega bo sumim.

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Event ob spremembi ItemIndex-a v TComboBox-u

Odgovor Napisal/-a Runner » 04.12.2009 09:58:38

Lahko pa tudi napišeš class helper za ComboBox.

Koda: Izberi vse

  
type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure ComboBox1Select(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TComboHelper = class helper for TComboBox
  public
    procedure HandChangeItem(const Index: Integer);
  end;

var
  Form1: TForm1;
In še implemetacija

Koda: Izberi vse

  
procedure TComboHelper.HandChangeItem(const Index: Integer);
begin
  ItemIndex := Index;
  Select;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ComboBox1.HandChangeItem(0);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Sleep(1);
end;

procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  Sleep(1);
end;
Preverjeno deluje in je eleganta rešitev. Vendar se moraš zavedati potencialnih nevarnosti ki jih nosijo s seboj class helperji :)

Odgovori