Indeks pozycji w ComboBox

0

Witam

W jaki sposób mogę ustawić dla pozycji w menu jakiś konkretny index?
Chodzi mi o uzyskanie sytuacji podobnej do pola <select> w HTML-u, gdzie wybierając pozycję otrzymujemy jakąś wartość (value)

Czy jest to w ogóle możliwe w tym komponencie lub jakimkolwiek innym?

0

chodzi ci o dodanie czegos do ComboBoxa? w object instector masz takie cos jak "items" tam dodajesz nowe wartosci, a potem sprawdzasz, if wartosc = jakastam then begin costam :P

0

GieKaA: Nie o to mi chodziło. Jak dodawać elementy do do Combo to wiem.
chodzi mi o jakiś odpowiednik 'select' z HTML. Czyli na liście combo mam widoczne pozycje Test1, Test2 ... itd. i dla każdej z nich wartość indexu 1, 2 ... itd

Potrzebuję wykorzystać to przy obsłudze bazy danych.
Pobieram jakieś wartości z tablicy 'test' (select id, nazwa from test)
Wynik zapytania (pole 'nazwa') wsadzam do Combo, ale co z ID? Chciałbym, aby po wybraniu pozycji z listy była zwrócona nie nazwa ale ID. Czy Combo wspiera to (lub inny komponent), czy muszę bawić się z tablicami?

0

A właściwość ItemIndex? Zwraca ona indeks aktualnie zaznaczonej pozycji. :)

0

Podejrzewam, że koledze nie o to chodziło. Przykładowa sytuacja:
z bazy danych pobieramy trzy rekordy:
id ; nazwa
5 ; tekst1
12 ; tekst2
27 ; tekst3

wrzucając to do combobox'a mamy:
ItemIndex ; wartość
0 ; tekst1
1 ; tekst2
2 ; tekst3

i powstaje problem z id rekordów w bazie. Przy niedużej ilości itemów radziłem sobie w ten sposób, że wynik zapytania do bazy wrzucałem sobie do combobox'a i do tablicy w ktorej przechowywalem oprocz nazwy również id.
Jeśli itemy w tablicy i combobox'ie będą w tej samej kolejności to index tablicy i ItemIndex combobox'a będą takie same i łatwo je ze sobą powiązać przy odczycie.
Chyba trochę zamotałem ale myślę że zrozumiecie :)
Pozdrawiam.</b>

0
dts napisał(a)

Podejrzewam, że koledze nie o to chodziło. (...) wynik zapytania do bazy wrzucałem sobie do combobox'a i do tablicy w ktorej przechowywalem oprocz nazwy również id.
Jeśli itemy w tablicy i combobox'ie będą w tej samej kolejności to index tablicy i ItemIndex combobox'a będą takie same i łatwo je ze sobą powiązać przy odczycie

Dokładnie taki mam problem i nad takim samym rozwiązaniem myślałem.
Miałem jednak nadzieję, że może istnieje jakiś inny komponent, posiadający takie możliwości.

Pozdrawiam

0

Zainteresuj się własnością Items. Każda pozycja ma swój tekst, który jest pokazywany w ComboBoxie (ComboBox.Items.Strings[i]) i wskaźnik (ComboBox.Items.Objects[i]). Wykorzystaj ten wskaźnik.

0

Ja miałem podobny problem bo chciałem wyświetlić 2 kolumny i rozwiązałem to tak :
do każdej nazwy np. "_pozostali" na końcu dodawałem numer czyli : =9999
Czyli treść wyglądała tak _pozostali=9999
user image

a dalej to już tylko odpowiednie wyświetlenie danych i wyciąganie informacji np. :


Procedure TForm1.RysujCombo(Kombo:TCombobox; szerokosc:integer; separator:string;Reszta:byte; Rect:Trect; Index: Integer);
var
tst,tst1:string;
Ltst:byte;
Begin
  with Kombo.Canvas do
    begin
      FillRect(Rect);
      pen.Color:=clBtnFace;//rgb(255,0,0);
    //Brush.Style := bsSolid; // styl - jednolity
      Rectangle(Rect.Left + szerokosc-6, Rect.Top -2, Rect.Left + szerokosc-4, Rect.Bottom + 2);
      Brush.Style := bsClear; // tło na przeźroczyste
      tst:=Kombo.Items.Strings[index];

      tst1:=tst;
      ltst:=pos(SEPARATOR,tst);
      delete(tst,ltst,(length(tst)-ltst)+1);
      delete(tst1,1,length(tst)+1);
      delete(tst1,length(tst1)-RESZTA+1,reszta);


      TextOut(Rect.Left+4 , Rect.Top + 2, tst1  ); // pisz tekst
      TextOut(Rect.Left + szerokosc, Rect.Top + 2, tst ); // pisz tekst
    end;
End;

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  RysujCombo(ComboBox8,80,'=',0,RECT,INDEX);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
  var
  tst,tst1:string;
begin
  tst:=combobox1.Text;
  tst1:=tst;
  delete(tst,1,pos('=',tst));    //numer za =
  delete(tst1,pos('=',tst1),255);//tekst
end;
0

już bardziej sie tego zakręcić nie da :>

A DBLookupComboBox nie wystarcza?? W ListSource dajesz DataSource, ListField to co ma być w CB a w KeyField pole kluczowe i po sprawie

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