Listview checkbox sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Listview checkbox sorunu

Mesaj gönderen carsoft »

Listview'de ki checkbox kullandığım herhangi bir itemi seçince

butonun aktif olmasını istiyorum ama olmuyor.

Kod: Tümünü seç

procedure TFormKasa.ListView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  var
    i: Integer;
begin
  try
    with ListView1 do
    begin
      for i := 0 to Items.Count - 1 do

      if Items[i].Checked then
        begin
          btKapat.Enabled := true
        end else
        btKapat.Enabled := False;
end;
finally
  end;
  end;
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Listview checkbox sorunu

Mesaj gönderen ikra »

Kod: Tümünü seç

var
  I: Integer;
  found: Boolean;
begin
  found := False;
  
  for I := 0 to pred(Items.Count) do
  begin
    found := Items[I].Checked;
    if found then
      break;
  end;
  
  btnKapat.Enabled := found;
end;
kıdemsiz üye
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Listview checkbox sorunu

Mesaj gönderen xxxjedixxx »

Merhaba,

Öncelikle MouseDown Event'inin yapmak istediğiniz iş için uygun olmadığını düşünüyorum. CheckBox'ları klavyeden boşluk (Space) tuşu ile de işaretleyebilrsiniz. Bu durumda sizin kodunuz çalışmayacaktır. Bunun için en uygun Event'in Change Event'i olduğunu düşünüyorum. Aşağıdaki kodu deneyip sonucu gözlemleyebilirsiniz. Delphi'deki ListView'ın sadece checkbox seçimi ile ilgili bir Event'i yok. Bu yüzden alternatifleri kullanıyoruz. Aşağıdaki kod da tam doğru bir çözüm değil. Çünkü Change event'i ListView'a yeni bir Item eklediğinizde de çalışır. Eğer çok fazla Item eklenecek ise performans açısından sürekli aynı şeyi yapmaması için ekleme anında bu kodu bir şekilde bypass ettirmeniz gerekir. Bu sorunu, ekleme anını belirten mantıksal bir değişken yardımı ile çözebilirsiniz.

Bilgi olarak söylüyorum; Yeni bir Item eklendiğinde, aşağıdaki procedure'e bir kaç gelmektedir. Bunu engellemek için Change parametresini kullandım.

Kod: Tümünü seç

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);
var i: integer;
begin
  if Change = ctState then
  begin
    btKapat.Enabled := False;
    for i := 0 to ListView1.Items.Count - 1 do
    if ListView1.Items[i].Checked then
    begin
      btKapat.Enabled := True; Exit;
    end;
  end;
end;
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Re: Listview checkbox sorunu

Mesaj gönderen carsoft »

evet onChange daha iyi teşekkürler
Cevapla