listview CheckedCount

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

listview CheckedCount

Mesaj gönderen hido »

Selam;

Listviewden herhangi bir satır checked yapılarak o kayıtı düzenleme gibi işlemler yaptırıyorum;
Birden fazla kayıt seçildiğinde veya hiç kayıt seçilmemesi durumunda kullanıcı uyarılıyor, buraya kadar sorun yok fakat test için birden fazla checked yaparak veya tek tayıt seçerek kontrol yapıyorum bir süre sonra bir kayıt seçli olmasına rağman (if Items.CheckedCount > 1 then) devreye girerek uyarı mesajı geliyor bu sorun neden kaynaklı olabilir...

Kod: Tümünü seç

  try
    with TaslakListView do
    begin
      for I := Items.Count - 1 downto 0 do
      begin
        if Items.CheckedCount < 1 then
        begin
          MesajLabel.Text := 'Güncelleme işlemi için kayıt seçiniz.';
          Exit;
        end
        else
        begin
          if Items.CheckedCount > 1 then
          begin
            MesajLabel.Text := 'Sadece bir kayıt seçiniz.';
            Exit;
          end
          else
          begin
            if Items[I].Checked then
            begin
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: listview CheckedCount

Mesaj gönderen fesiharslan »

Merhaba;
if Items.CheckedCount > 1 then
begin
MesajLabel.Text := 'Sadece bir kayıt seçiniz.';
yerine

Kod: Tümünü seç

if Items.CheckedCount = 1 then
          begin
            MesajLabel.Text := 'Sadece bir kayıt seçiniz.';
Şeklinde olmalıdır.
Ayrıca birden fazla kayıt kontrolü içinde aşağıdaki gibi bir düzenleme yapabilirsiniz.

Kod: Tümünü seç

if Items.CheckedCount > 1 then
          begin
            MesajLabel.Text := 'Birden fazla kayıt seçiniz.';
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: listview CheckedCount

Mesaj gönderen fesiharslan »

Aslında Case yapısı ile kontrol etmek daha doğru olacaktır.

Kod: Tümünü seç

with TaslakListView do
   begin
      for I := Items.Count - 1 downto 0 do
      begin
        Case Items.CheckedCount of
         0: begin
          MesajLabel.Text := 'Güncelleme işlemi için kayıt seçiniz.';
           end;
          1: begin
               MesajLabel.Text := 'Sadece bir kayıt seçtiniz.';
              end;
             else
                MesajLabel.Text := 'Birden fazka kayıt seçtiniz.';
          end;
        end;
     end;
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: listview CheckedCount

Mesaj gönderen hido »

fesiharslan hocam sizin önerileriniz dahil bir kaç yöntem daha denedim, delphi android mi sıkıntı var anlayamadım! Checkedleri saydırma gibi bir çok yöntem denedim fakat if else then doğru çalışmıyor....

Kod: Tümünü seç

var
  Say: Integer;
begin
  try
    Say := 0;
    with TaslakListView do
    begin
      for I := Items.Count - 1 downto 0 do
      begin
        if Items[I].Checked then
        begin
          Say := Say + 1;
        end;
        if Say = 0 then
        begin
          RectangleMain.Visible := True;
          RectangleMesaj.Visible := True;
          MesajText.Text := 'Güncelleme işlemi için kayıt seçiniz.';
          Exit;
        end
        else
        begin
          if Say > 1 then
          begin
            RectangleMain.Visible := True;
            RectangleMesaj.Visible := True;
            MesajText.Text := 'Birden fazla kayıt seçtiniz.';
            Exit;
          end
          else
          begin
            if Items[I].Checked then
            begin
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: listview CheckedCount

Mesaj gönderen fesiharslan »

Bu konu ile ilgili hafta içi bir örnek proje ile paylaşımda bulunurum inşallah.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: listview CheckedCount

Mesaj gönderen fesiharslan »

Merhaba;
Örnekte, ListView nesnesinin CheckedCount özelliği ile seçili Item sayıları alınmakta ve Case yapısı ile seçimler değerlendirilmektedir.

Örnek Ekran Görüntüleri:
Resim

Örnek Proje:
https://mega.nz/#!XcFRCIpC!vf1PKRixIqj3 ... yqfB_IWtGU
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: listview CheckedCount

Mesaj gönderen hido »

Hocam emeğinize sağlık;

Mantık hatasımı yapıyorum anlamadım! formu ilk açtığımda kodlar güzelce çalışıyor, sonra telefondan geri tuşu ile ana formma geri gelip tekrar taslak formu açtığımda kod tam olarak işlemi yapmıyor: hiç bir satır seçili değilken (Güncelleme işlemi için kayıt seçiniz) uyarısı devreye girmiyor, bir satır seçiliyken (Birden fazla kayıt seçiniz.) uyarısı devreye giriyor anlamadım gitti...

Telefondan geri tuşuna basıldığında açık olan formu kapatıyorum:

Kod: Tümünü seç

procedure TForm5.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if Key = vkHardwareBack then
    Form5.Close;
end;
Kodları kendime göre düzenledim:

Kod: Tümünü seç

procedure TForm5.BtnGuncelClick(Sender: TObject); // Güncelleme
var
  I: Integer;
begin
  with TaslakListView do
  begin
    case Items.CheckedCount of
      0:
        begin
          RectangleMain.Visible := True;
          RectangleMesaj.Visible := True;
          MesajText.Text := 'Güncelleme işlemi için kayıt seçiniz.';
        end;
      1:
        begin
          for I in Items.CheckedIndexes(True) do
          begin
            Form8.MesajEdit.Lines.Clear;
            Form8.MesajEdit.Lines.add(Items[I].Text);
            MesajUpdateId := StrToInt(Items[I].Tag.ToString);
            Form8.Insert.Visible := False;
            Form8.Update.Visible := True;
            Form8.MesajEdit.SetFocus;
            Form8.Show;
          end;
        end
    else
      begin
        RectangleMain.Visible := True;
        RectangleMesaj.Visible := True;
        MesajText.Text := 'Birden fazla kayıt seçiniz.';
      end;
    end;
  end;
  Free;
end;
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: listview CheckedCount

Mesaj gönderen fesiharslan »

Uygulamanızda tek form kullanın. Formlar yerine TabControl nesnesi kullanın.
Örneğin 5 form yerine bir TabControl nesnesinde 5 adet Tab oluşturun.

Kod: Tümünü seç

Form2.Show 
yerine

Kod: Tümünü seç

TabControl1.ActiveTab:=TabItem2;
yazmanız yeterli olacaktır. Geri dönmek için ise (Ana formunuz TabItem1)

Kod: Tümünü seç

TabControl1.ActiveTab:=TabItem1;
yazın.
TabControl'ün sekmelerini gizlemek ve ilk taba geçmek için ise Formun OnCreate olayına aşağıdaki kodları yazın

Kod: Tümünü seç

  TabControl1.ActiveTab:=TabItem1;
  TabControl1.TabPosition:=TTabPosition.None;
İyi çalışmalar.
Cevapla