Arkadaşlar nerden başlayacağımı bilmediğim için konuyu açmak istedim belki bilen arkadaşlar bana yol gösterebilirler. Forma iki tane listview koydum ve
iki listview arasında column 2 lerden eşit olanları bulup eşit olanlardan listview 2 deki column3 ü listbox1 e nasıl aktarabilirim hafif matematikde küme işlemlerine benzedi
merhabalar
şyle bir algoritma yazabilirsiniz.
3 boyutlu bir dizi tanımlayın önce
1-listview1 deki ürünün adet sayısı kadar döngü kurun ve bu döngünün içerisinde
2-listview2 deki ürünün adet sayısı kadar döngü kurun
3-eğer listview1 den aldıgınız elamanın aynısını listview2 de bulursanız sıra,ürünadı,adet olarak dizinize listview1 deki adet ile listview2 deki adeti toplayarak yazın
4 eğer listbiew1 den aldığınız eleman listview2 de yok ise dizimize sırano,ürün,adet sırası ile listview1 deki adet kısmını ekleyeniz
5 dizinin icindeki elemanları listview aktarın
karışık olmadı umarım.
iyi çalışmalar.
bundan daha hızlı çalışan algoritmalar geliştirilebilir bu arada.
Var
i,j:Integer;
begin
for i := 0 to ListView1.Items.Count - 1 do
begin
for j := 0 to ListView2.Items.Count - 1 do
begin
if ListView1.Items[i].SubItems[1] = ListView2.Items[j].SubItems[1]
then ListBox1.Items.Add( ListView2.Items[j].SubItems[2] );
end;
end;
mrmarman hocam yazdığın kodu denedim buttona verdim kodları butona bastığım zaman List index out of bounds (2) hatası verdi. bir yerde bir hata var sanırsam bir de mesela bu hata neyi ifade ediyor hataları da açıklarsan en azından öğrenmiş olurum bir daha böle bir durumla karşılaştığımda halledebilirim geliştirme açısından.
procedure TForm1.Button1Click(Sender: TObject);
Var
i,j:Integer;
begin
for i := 0 to ListView1.Items.Count - 1 do
begin
for j := 0 to ListView2.Items.Count - 1 do
begin
if ListView1.Items[i].SubItems[0] = ListView2.Items[j].SubItems[0]
then ListBox1.Items.Add( ListView2.Items[j].SubItems[1] );
end;
end;
end;
Kodu bu şekilde değiştirdim düzeldi doğru diyorsun listview de subitem ve itemlerin sıralamasında eksiğim varmış sayende o eksik kapandı saolasın
procedure TForm1.Button3Click(Sender: TObject);
Var
i,j:Integer;
s,:string;
meyve1:string;
begin
s:='armut';
for j := 0 to ListView1.Items.Count - 1 do
begin
if s = ListView1.Items[j].SubItems[0] then
meyve1 := ListView1.Items[j].Caption;
if ListView1.Items[j].Caption = meyve1 then
begin
ListView1.Items[j].SubItems.Strings[0] := '22';
ListView1.Items[j].SubItems.Strings[1] := '33';
end;
end;
end;
bu kod ile list view de string e atadığım kelimeyi bulup onun column larını değiştirebiliyorum ama birden fazla değişim yaptırmak istiyorum beceremedim
procedure TForm1.Button3Click(Sender: TObject);
Var
i,j:Integer;
s,x:string;
meyve1,meyve2:string;
begin
s:='armut';
x:='elma';
for j := 0 to ListView1.Items.Count - 1 do
begin
if (s = ListView1.Items[j].SubItems[0]) and (x = ListView1.Items[j].SubItems[0]) then
meyve1 := ListView1.Items[j].Caption;
meyve2 := ListView1.Items[j].Caption;
if (ListView1.Items[j].Caption = meyve1) and (ListView1.Items[j].Caption = meyve2) then
begin
ListView1.Items[j].SubItems.Strings[0] := '22';
ListView1.Items[j].SubItems.Strings[1] := '33';
end;
end;
end;
Kodu bu şekilde kullandığımda etki etmiyor yada 3 tane 5 tane birden değiştirmek istediğimde olmuyor hatayı nerede yapıyorum acaba ?