procedure TForm1.btnEkleClick(Sender: TObject);
const
s:integer=0;
begin
if lstv.Items.Count=0 then
begin
s:=0;
lstv.Items.Add;
lstv.Items[s].Caption:=ed1.Text;
lstv.Items[s].SubItems.Add(cb1.text);
lstv.Items[s].SubItems.Add(datetostr(dtp1.Date));
s:=s+1;
end;
end;
Öyle de ekleniyor. Siz List:TListItem; diyerek listitem tanımlamış oldunuz. Arkadaş örneğinde tanımlama yapmadan uzun uzun listitem kodunu yazmış. Değişen bir şey yok.
In dubio pro reo... Şüpheden sanık/özgürlük yararlanır...
Çok şey değişir eklenecek veri 1 satırdan fazlasıysa ve değişkense ne olacak? Her Item sayısını tespit etmek için bazı döngü ve kurallar kullanacak. Bu da Performans açısından Debug yaptığımızda 55-60 ms' ye tekabil eder ki bu büyük bir problemdir bence. Ama eğer tek satır kullanımı söz konusuysa elbette sorun yok.
arkadaşlar cevaplar için teşekkürler. yukardaki örneğe bir kitapta rastlamıştım ve o zaman delphiye başladığım ilk gün olduğu için kodun çalışmamasına aval aval bakmıştım sadece. gerçi üzerinden çok fazla zaman geçmedi henüz ama dün delphi sitelerinde dolaşırken aynı örneğe rastladım yine ve neydi acaba kurcalayayım dedim. şu anda en azından const bir verinin değiştirilemeyeceğini ve problemin ordan kaynaklandığını tahmin ettim.
ama şu anda listview e eleman ekleme konusunda başka bir problem var. başka bir konu açmadan burdan devam edeyim. yukardaki kodu tam çalışır hale getirmeye çalıştım. getirdim ama cinsiyet seçimi var formda ve ben bu seçimin boş bırakılmasını veya her ikisininde seçilmesini istemiyorum. dolayısıyla listeye elemanların eklenmesini if döngüsü ile şarta bağladım. cinsiyet seçiminde problem olduğunda showmessage ile uyarı yapıyorum. buraya kadar problem yok ama bu uyarının arkasından listeview e boş bir satır ekleniyor. bu boş satırın eklenmesinin nedeni nedir?
procedure TForm1.Button1Click(Sender: TObject);
begin
with lstw1.Items.Add do
begin
if (chckb1.Checked=true) and (chckb2.Checked=true) then
begin
showmessage('ikisini birden seçme');
end
else if (chckb1.Checked=false) and (chckb2.Checked=False) then
begin
showmessage('cinsiyet seçimi yap');
end
else if chckb1.Checked=true then
begin
caption:=ed1.Text;
subitems.Add(cb1.Text);
subitems.Add(datetostr(dtp1.Date));
subitems.Add(chckb1.Caption);
end
else
begin
caption:=ed1.Text;
subitems.Add(cb1.Text);
subitems.Add(datetostr(dtp1.Date));
subitems.Add(chckb2.Caption);
end;
end;
end;
Yanlış bilgi kalmasın diye bir doğrulama yapmak istedim. Yukarıdaki şekilde bşr cons tanımında hata verir ancak ikinci bir kullanım alanı daha vardır.
Const da aslında bir değişkendir. Sadece ikinci bir emre kadar değişmemesi nedeniyle sabit denmiştir. {$j+} {$j-} direktifleri arasındaki constlara procedure veya fonksiyon içerisinde değer atayabilir ve değiştirebilirsiniz. Hata almazsınız.
Function veya procedure ilk defa çalıştığında ilk değer ne ise onu alır, aynı fonksiyon veya procedure yeniden başvurduğunuzda en son verilen değer neyse bu defa ondan başlar.
Global bir değilken gibi davranır ama sadece aynı procedure veya Function içinden erişilebilir.
cevap basit. peşin peşin satır ekleyip ondan sonra if'leri sorgulamışsın. demek ki şartların hiçbirine uymayan bir durum söz konusu ki boş kalıyor. aynı durum devam ettiği sürece bir tane de boş satır eklet beş tane de...
iflerden sonra true durumu oluşursa add demen gerekirdi.