checklistbox--bu kodun neresi hatalı?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

checklistbox--bu kodun neresi hatalı?

Mesaj gönderen CinAnka »

Merhabalar herkese;

Bir kod yazdım fakat bir yerinde hata war sanırım bana hiçbir sonuç döndürmüyor. Hatanin nerede olduğunu ise bir türlü bulamadım...

Formumda bir tane checklistbox, bir tane de listbox var. benim amacım, checklistbox da olan işaretlenmiş seçenekleri listboxa atmak. Ama, eğer işaretlenmiş seçenekten listbox içerisinde var ise, o zaman onu atmayacak. yani:

checklistbox listbox
adana adana
ankara
rize
samsun

ise, ekle butonuna basınca

checklistbox listbox
adana adana
ankara ankara
rize rize
samsun samsun

olmalı, adana 2 kez tekrarlanmayacak listbox içinde...

yazdığım kod ise şöyle:

Kod: Tümünü seç

procedure TForm6.BitBtn20Click(Sender: TObject);
var
secenek, kontrol:integer;
checklistbox_index,listbox_index :string;
begin

for secenek:=0 to checklistbox1.Items.count-1 do
begin
        if checklistbox1.Checked[secenek] then
        begin
                 for kontrol:=0 to listbox3.Count-1 DO
                 begin
                 if checklistbox1.Items.Strings[secenek]<>listbox3.Items.Strings[kontrol] then
                 listbox3.Items.Add(checklistbox1.Items.Strings[secenek]);
                 end;
        end;
end;
end;

bu kodu çalıştırdığım zaman hata vermiyor, ancak listbox içerisine de herhangi bir ekleme yapmıyor. hata nerede??

Kolay Gelsin....
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Re: checklistbox--bu kodun neresi hatalı?

Mesaj gönderen vampir261 »

CinAnka yazdı:

Kod: Tümünü seç

for kontrol:=0 to listbox3.Count-1 DO
begin
    if checklistbox1.Items.Strings[secenek]<>listbox3.Items.Strings[kontrol]                   then
        listbox3.Items.Add(checklistbox1.Items.Strings[secenek]);
end; 


Satırdaki kodu tekrar incelersen listbox3 içinde hiç eleman olmadığı için listbox3.count=0 dır ve senin içteki bu döngün hiç çalışmıyor. Bu yüzden ekleme yapılamıyor. Kodunda düzenleme yapmalısın.
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

evet ama, buna benzer başka bir kod yazmıştım, orada 2 listbox vardı, ve kodum orada tıkır tıkır çalışıyordu. o yüzden, aklıma gelmesine rağmen, hatanın listede eleman olmamasından kaynaklandığını düşünmedim. düzeltme öneriniz nedir???
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Mesaj gönderen vampir261 »

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var
secenek, kontrol:integer;
listboxtavarmi:boolean;
begin
    ListBox1.Items.Clear;
    for secenek:=0 to checklistbox1.Items.count-1 do
    begin
        listboxtavarmi:=false;
        if checklistbox1.Checked[secenek] then
        begin
            for kontrol:=0 to listbox1.Count-1 DO
            begin
                if checklistbox1.Items.Strings[secenek]=listbox1.Items.Strings[kontrol] then
                begin
                    listboxtavarmi:=true;
                    break;
                end;
            end;
            if (not listboxtavarmi) then
                listbox1.Items.Add(checklistbox1.Items.Strings[secenek]);
        end;
    end;
end;

Senin kodu kullanmaya çalıştım uzun oldu biraz ama işini görür. Optimize edebilir ama vaktim yok. Sen toparlarsın
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

cevabınız için teşekkür ederim ama sizin vermiş olduğunuz kod da çalışmadı. daha doğrusu kodda hata yok, ama ekleme işlemi yapmıyor, işlevsiz...
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba aşağıdaki kodu bir deneyin.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
j,i:integer;
ayni:char;
begin
           ayni:='H';


          for i:=0 to CheckListBox1.Count-1 do
              begin
                if CheckListBox1.checked[i] then
                  begin


                          for j:=0 to listbox1.count-1 do
                            begin

                                 if CheckListBox1.Items[i]=listbox1.Items[j] then
                                        ayni:='E';


                            end;
                              if ayni='H' then   listbox1.items.add(CheckListBox1.Items[i])
                                else  ayni:='H';


                  end;
           end;
end;

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Mesaj gönderen vampir261 »

Gönderdiim kodu derledim çalışıyor gerisi size kalmış
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
vampir261 yazdı:Gönderdiim kodu derledim çalışıyor gerisi size kalmış
gönderdiğiniz koddaki

Kod: Tümünü seç

ListBox1.Items.Clear; 
ne oluyor hocam. Bu durumda onun istediği olmuyor. Şöyle düşünün.
checklistboxta
adana
mersin
urfa
malatya
olursa
listboxta ise
adana
izmir
olursa sizin koda göre hiç bir zaman listboxta izmir olmayacak.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Biraz da ben değiştireyim :wink:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  j, i: integer;
  ayni: char;
begin
  for i := 0 to CheckListBox1.Count - 1 do
  begin
    if CheckListBox1.checked[i] then
    begin
      ayni := 'H';
      for j := 0 to ListBox1.Count - 1 do
        if CheckListBox1.Items[i] = listbox1.Items[j] then
        begin
          ayni := 'E';  // aynısı varsa for j döngüsünden çık.
          break;
        end;
      if ayni = 'H' then
        ListBox1.Items.Add(CheckListBox1.Items[i]);
    end;
  end;
end;
Dikkat! ayni := 'H' yi for i döngüsü içine almak gerekiyor. ListBox daki her bir elemanı karşılaştırmaya başlamadan önce değeri 'H' (hayır) olmalı :!:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

arkadaşlar, yazdığınız bütün kodlar, benim başta yazıp göndermiş olduğum kodla aynı problemi veriyor.

listbox boş olduğunda ekleme yapmıyorlar... ve hatta sonraki kodlar liste dolu olduğunda dahi ekleme yapmıyorlar...:)
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

özür dileyerek düzeltme yapayım. ofenX arkadaşımın kodu çalıştı, az önce bir yerde değişiklik yapmayı unutmuşum, o yüzden çalışmamıştı.

kodlarınızı incelediğimde benimki ile aradaki farkın şu olduğunu gördüm:

listbox1.items.string ile listbox.items aynı şey değil mi?

son olarak, üşenmeden, sonuca ulaşmak için yardımcı olan arkadaşlara gerçekten sonsuz teşekkürler...

Kolay gelsin...
Bu arada herkesin geçmiş kandili mübarek olsun...
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

CinAnka yazdı: listbox1.items.string ile listbox.items aynı şey değil mi?


ikisi de aynı sonucu veriyor. Burada sade items tlistbox a ait , strign Tstrings e ait bir property oluyor.
başka da bir farkı varsa ben bilmiyorum.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Cevapla