Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: For döngüsü  (Okunma sayısı 2963 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı cebeser

  • Delphi 2 Level 1
  • *
  • İleti: 53
  • Rep: +0/-1
For döngüsü
« : 07 Kasım 2008 00:21:48 »
selamlar,

çalışmamda

-1 adet listbox
-1 adet textbox
-1 adet button
-1 adet panel

bulunmakta. page load olayında listboxa veritabanından bilgiler atanıyor. yapmak istediğim şey for döngüsü kullanarak textbox a yazılan kelimenin listboxta olup olmadığını anlamak ve eğer listede var ise paneli visible yapmak. kodu şöyle yazdım:

i : integer olarak tanımlandı.
event : button.click

for i := 0 to (ListBox1.Items.Count - 1) do
  if TextBox1.Text = ListBox1.Items.ToString then
  begin
  Panel.Visible := true;
  TextBox1.Text := '';
  end;

Ben burada bir hata göremiyorum, hatta olmadığına eminim. burada bir hata var mı ki panel bir türlü visible olmuyor?

(CodeGear son deneme sürümü, SQL server kullanıyorum. )

Teşekkürler.

Çevrimdışı hayati

  • Administrator
  • *****
  • İleti: 860
  • Rep: +19/-3
  • Cinsiyet: Bay
Ynt: For döngüsü
« Yanıtla #1 : 07 Kasım 2008 09:23:52 »
(Delphi 2007)

Kod:  (Unknown Language)
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.    i:byte;
  4. begin
  5.    for i := 0 to (ListBox1.Items.Count - 1) do
  6.      if edit1.Text = ListBox1.Items.Strings[i] then // ListBox1.Items [i] de aynı işi yapar
  7.      begin
  8.        Panel1.Visible := true;
  9.        edit1.Text := '';
  10.      end;
  11. end;

Olsa dahi tenimin kıl biten her yeri bir dil, güçsüzüm şükretmeye,şükrüm binde bir bile değil (İ.R.)

Çevrimdışı hayati

  • Administrator
  • *****
  • İleti: 860
  • Rep: +19/-3
  • Cinsiyet: Bay
Ynt: For döngüsü
« Yanıtla #2 : 07 Kasım 2008 09:28:39 »
:) pardon pardon ASP.NET imiş ama silmiyorum...
Olsa dahi tenimin kıl biten her yeri bir dil, güçsüzüm şükretmeye,şükrüm binde bir bile değil (İ.R.)

Çevrimdışı nax

  • Delphi 2 Level 1
  • *
  • İleti: 55
  • Rep: +0/-0
Ynt: For döngüsü
« Yanıtla #3 : 07 Kasım 2008 23:07:39 »
ben orada bir hata görüyorum :)

...
if TextBox1.Text = ListBox1.Items.ToString then
...

ListBox'un Items koleksiyonu listedeki tüm satırlara karşılık geliyor ve sen hepsini birden TextBox'ın Text'i ile karşılaştırıyorsun. Oysa herbir satırla ayrı ayrı karşılaştırman gerek.

Not: Delphi'nin son sürümün de ASP.Net desteği yok. RAD Studio 2007 olmasın :)
« Son Düzenleme: 07 Kasım 2008 23:08:15 by nax »

Çevrimdışı cebeser

  • Delphi 2 Level 1
  • *
  • İleti: 53
  • Rep: +0/-1
Ynt: For döngüsü
« Yanıtla #4 : 08 Kasım 2008 00:01:57 »
RAD studio konusunda haklısın :)

ama kod konusunda bence yanlışsın. çünkü benim yazdığım kod her satır için textbox ile eşleştiriliyor. senin söylediğin gibi de denedim (olmayacağını bilsem de) ama olmadı.

Çevrimdışı dameon

  • Delphi 5 Level 4
  • ****
  • İleti: 236
  • Rep: +5/-1
  • Cinsiyet: Bay
Ynt: For döngüsü
« Yanıtla #5 : 08 Kasım 2008 08:54:30 »
@Hayati'nin verdiği örnek BDS2006 ASP.NET'de çok güzel çalışıyor.
Listbox1.items bütün listeyi verirken listbox1.items[ x ] sadece bir elemanı verir.Burada x index değeridir.
« Son Düzenleme: 08 Kasım 2008 08:55:12 by dameon »

Çevrimdışı cebeser

  • Delphi 2 Level 1
  • *
  • İleti: 53
  • Rep: +0/-1
Ynt: For döngüsü
« Yanıtla #6 : 08 Kasım 2008 11:05:12 »
ben zaten bir elemanı kontrol etmek istiyorum.

listboxta
1- ali
2- veli
3- ayşe

gibi isimler olduğunu düşünün. ben her bir satırı textbox ile karşılaştırmak istiyorum.
yani listbox un 1. satırına bak eğer textbox la aynıysa paneli göster değilse listbox un 2. satırına bak... gibi

Çevrimdışı nax

  • Delphi 2 Level 1
  • *
  • İleti: 55
  • Rep: +0/-0
Ynt: For döngüsü
« Yanıtla #7 : 08 Kasım 2008 12:32:12 »
C#'ta aşağıdaki gibi denedim çalıştı... (Bilgisayarımda Delphi.Net yüklü değil.)

Kod:  (Unknown Language)
  1.     protected void Page_Load(object sender, EventArgs e)
  2.     {
  3.         ListBox1.Items.Add("Ali");
  4.         ListBox1.Items.Add("Veli");
  5.         ListBox1.Items.Add("Sami");
  6.     }
  7.     protected void Button1_Click(object sender, EventArgs e)
  8.     {
  9.         Panel1.Visible = ListBox1.Items.IndexOf(new ListItem(TextBox1.Text)) > -1;
  10.     }

Delphi'de yazınca tek değiştirmen gereken kısım aşağıdakidir diye tahmin ediyorum.

Kod:  (Unknown Language)
  1.     Panel1.Visible := ListBox1.Items.IndexOf(ListItem.Create(TextBox1.Text)) > -1;

Çevrimdışı cebeser

  • Delphi 2 Level 1
  • *
  • İleti: 53
  • Rep: +0/-1
Ynt: For döngüsü
« Yanıtla #8 : 09 Kasım 2008 01:44:59 »
sorunum hala çözülebilmiş değil :(

Çevrimdışı dameon

  • Delphi 5 Level 4
  • ****
  • İleti: 236
  • Rep: +5/-1
  • Cinsiyet: Bay
Ynt: For döngüsü
« Yanıtla #9 : 09 Kasım 2008 06:07:57 »
Kod:  (Unknown Language)
  1. procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
  2. begin
  3.   // TODO: Put user code to initialize the page here
  4. listbox1.items.add('Elma');
  5. listbox1.items.add('Armut');
  6. listbox1.items.add('Ayva');
  7. listbox1.items.add('Cilek');
  8. listbox1.items.add('Karpuz');
  9. end;
  10.  
  11. procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
  12. var  i:byte;
  13. begin
  14. for i := 0 to Listbox1.items.Count - 1 do
  15. if edit1.Text = ListBox1.Items[i].ToString then
  16. begin
  17. Panel1.Visible := true;
  18. edit1.Text := '';
  19. end;
  20. end;

Edit1 içine yukarıdaki meyvelerden birisini yazınca panel visible hale geçiyor.Sanırım senin veritabanından gelen bilgi tam string olarak gelmiyor veya yanlış geliyor.Listbox içine dolan veriyi ekrana yazdırırsan veya kontrol edebilirsen belki sorun oradadır.

Çevrimdışı nax

  • Delphi 2 Level 1
  • *
  • İleti: 55
  • Rep: +0/-0
Ynt: For döngüsü
« Yanıtla #10 : 09 Kasım 2008 09:40:34 »
@cebeser yazdığın kod maalesef yanlış, aynı şeyi dameon'da söylüyor ancak mevzu bu değil.

@dameon sana yada zatında ihtiyacı olanlara tavsiye.
Yukarıdaki gibi bir döngüde, aradığını bulduktan sonra döngüye daha fazla devam etmemek icab eder :) .
Yana aradığın şeyi 1. adımda buldunsa ve 500 elemanı olan bir listeyi tarıyorsan diğer 499 adım'ın gereksizliği ortada. Dolayısı ile yapman gereken if bloğunda break komutunu kullanman. Aşağıdaki gibi.

Kod:  (Unknown Language)
  1. ...
  2. if edit1.Text = ListBox1.Items[i].ToString then
  3. begin
  4.   Panel1.Visible := true;
  5.   edit1.Text := '';
  6.   break;
  7. end;
  8. ...

@cebeser, bu aslında ziyadesiyle basit bir mesele. Herşeye rağmen hala olmuyor diyorsan; aklıma şimdilik gelen tek şey liste elamanlarını veritabanından alıyorsun ve bu elemanlar veritabanında CHAR olarak tanımlanmıştır. Şu halde yapabileceğin şey ya veritabanını değiştirerek alan türünü CHAR yerine VARCHAR yapman ya da "Trim" benzeri bir fonksiyonla listeye elmanları eklemeden önce boşluklarını kırparak eklemen ve tabi aynı şekilde TextBox'taki metnide yine Trim'le kırparak karşılaştırman.
Kod:  (Unknown Language)
  1. ...
  2. Panel1.Visible := ListBox1.Items.IndexOf(ListItem.Create(TextBox1.Text.Trim())) > -1;
  3. ...

kodunun işini görmesi lazım. Tabi önce Panel1.Visible := false olarak ayarlanmış olmalı. for döngüsüne de ihtiyacın yok.
« Son Düzenleme: 10 Kasım 2008 19:41:49 by nax »

Çevrimdışı nax

  • Delphi 2 Level 1
  • *
  • İleti: 55
  • Rep: +0/-0
Ynt: For döngüsü
« Yanıtla #11 : 09 Kasım 2008 09:53:40 »
ayrıca :)

büyük küçük harf duyarlılığı ile de ilgilenmelisin.

Çevrimdışı dameon

  • Delphi 5 Level 4
  • ****
  • İleti: 236
  • Rep: +5/-1
  • Cinsiyet: Bay
Ynt: For döngüsü
« Yanıtla #12 : 10 Kasım 2008 09:02:24 »
@Nax , tavsiyen için teşekkürler ama ihtiyacım yoktu.Ben mevcut kodu zenginleştirmek değil çalışabilirliğini kontrol ettim.

Çevrimdışı nax

  • Delphi 2 Level 1
  • *
  • İleti: 55
  • Rep: +0/-0
Ynt: For döngüsü
« Yanıtla #13 : 10 Kasım 2008 19:42:52 »
@dameon; kusura bakma gerekli düzeltmeyi yaptım.