TListView with RadioButtons

0

Witam

Choć jestem juz doswiadczonym programistą, to jednak mam lamerskie pytanie.

Otoz:
Czy jest mozliwosc, aby w TListView wyswietlic pola typu "RadioButton"

Wiem ze mozna ustawic wartosc

    ListView.CheckBoxes := True;

Wtedy są checkboxy, aczkolwiek musze miec dokladnie zaznaczone tylko jedno pole wyboru.

Probowalem wiec z ponizsza procedura, w roznych zdarzeniach jak OnSelectItem, OnClick...

for i := 0 to lvTerminarz.Items.Count -1 do
  begin
    lvTerminarz.Items[i].Checked := false;
  end;
  lvTerminarz.Items[lvTerminarz.ItemIndex].Checked := true;

Generalnie to (prawie)rozwiazuje problem aby tylko jedno pole bylo zaznaczone. Jest jednak jedno ALE. W momencie kiedy klikne myszką na pole Check, mam zaznaczone 2 pola(zalacznik) :(

Wiem ze jest komponent VirtualString o poteznych mozliwosciach w ktorym moglbym dodac pole typu Radio, jednak wole to zachowac jako ostatecznosc. Moze najpierw daloby sie pokombinowac cos z TListView?

Zrzut: http://img19.imageshack.us/img19/9421/listviewwithradiobutton.jpg

0

Nie wiem za bardzo co Ci doradzić. Pewnie da się to osiągnąć, przez własną obslugę rysowania kontorlki. Albo coś w tym stylu, jak opisano na: http://delphi.about.com/library/weekly/aa053105a.htm - tylko, że zamiast ProgressBarów zrobić małą nierozszerzalną kolumnę na te RadioButtony. Tak ja bym kobminował, ale może ktoś jeszcze tutaj doradzi Tobie ćoś lepszego.

0

Wywal ListVew zainstaluj VirualTreeView a życie stanie się prostsze :)

0

Juz sobie poradzilem :)

Wystarczylo ustawic parametr

checkboxes := false

W procedurze onClick:

for i := 0 to lvTerminarz.Items.Count -1 do
  begin
    lvTerminarz.Items[i].Checked := false;
  end;
  lvTerminarz.Items[lvTerminarz.ItemIndex].Checked := true;

I jest pieknie! Wtedy jest zaznaczone zawsze tylko jedno pole! co prawda checkboxa nie widać, ale to nawet lepiej! Bo tu tkwi ten trick. Nie mamy mozliwosci zaznaczenia innego pola, jedynie te ktore aktualnie jest podswietlone. Udalo sie poradzic bez ViertualTreeView :)

0

A czym się różni utworzenie CheckBox'ów i ręczne odznaczanie wszystkich przed zaznaczeniem aktualnie klikniętego od normalej listy ze stylem vsReport i odczytaniem ItemIndex?

CheckBox'y są dostępne po to, by użytkownik mógł wybrać więcej niż jeden item nie bazując na podświetleniu - Ty zaś potrzebujesz mieć podświetloną (wybraną) tylko jedną pozycję, więc te kontrolki są według mnie zbędne i wprowadzać mogą w błąd potencjalnego użytkownika.

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