Yazilim Öğrenmenin Tek Adresi...
Daha İyi Bir Hizmet İçin Lütfen Üye Olunuz...
Yazilim Öğrenmenin Tek Adresi...
Daha İyi Bir Hizmet İçin Lütfen Üye Olunuz...
Yazilim Öğrenmenin Tek Adresi...
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Yazilim Öğrenmenin Tek Adresi...

En Kapsamlı Visual Basic Sitesi
 
AnasayfaAramaLatest imagesKayıt OlGiriş yap
Giriş yap
Kullanıcı Adı:
Şifre:
Beni hatırla: 
:: Şifremi unuttum
Arama
 
 

Sonuç :
 
Rechercher çıkıntı araştırma
En son konular
» C İle Banka Otomasyonu Acill
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimeC.tesi Ocak 09, 2010 4:51 pm tarafından Ebubekir_Kara

» C++'la yapılmış basit ATM programı
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimeÇarş. Ara. 02, 2009 4:43 am tarafından 1221ibrahim

» Bir Oyunda Puan Sistemi Yapma
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimePtsi Kas. 02, 2009 1:49 pm tarafından KonYalıCoder

» Ipconfig Komutu
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimePaz Eyl. 13, 2009 5:33 pm tarafından OguzhanUyanik

» Çalıştır Komutları
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimePaz Eyl. 13, 2009 5:33 pm tarafından OguzhanUyanik

» Domain Adresleri
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimePaz Eyl. 13, 2009 5:32 pm tarafından OguzhanUyanik

» Msconfig Nedir? Ayarları ve Özellikleri
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimePaz Eyl. 13, 2009 5:32 pm tarafından OguzhanUyanik

» Windows Vista & Türkçe Kurulumu Resimli anlatım!
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimePaz Eyl. 13, 2009 5:31 pm tarafından OguzhanUyanik

» Format atmak ve Türkçe windows xp kurulumu (resimli anlatım)
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimePaz Eyl. 13, 2009 5:31 pm tarafından OguzhanUyanik

» Windows Xp Hızlandırma
ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimePaz Eyl. 13, 2009 5:30 pm tarafından OguzhanUyanik

En iyi yollayıcılar
OguzhanUyanik (472)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
mehmet bozer (78)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
asi_esra (4)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
mysterious_el (4)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
1221ibrahim (3)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
igny (3)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
tarkantr2000 (2)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
myildiz.16 (2)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
KAPORTACI (2)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 
tolgakesan (2)
ListBox'lar Arası Sürükle-Bırak Tekniği Vote_lcapListBox'lar Arası Sürükle-Bırak Tekniği I_voting_barListBox'lar Arası Sürükle-Bırak Tekniği Vote_rcap 

 

 ListBox'lar Arası Sürükle-Bırak Tekniği

Aşağa gitmek 
YazarMesaj
OguzhanUyanik
Mareşal
Mareşal
OguzhanUyanik


Yengeç Mesaj Sayısı : 472
Kayıt tarihi : 31/08/09
Yaş : 31
Nerden : Konya
İş/Hobiler : Bilgisyar-Yazılım
Lakap : Nediz

ListBox'lar Arası Sürükle-Bırak Tekniği Empty
MesajKonu: ListBox'lar Arası Sürükle-Bırak Tekniği   ListBox'lar Arası Sürükle-Bırak Tekniği Icon_minitimeÇarş. Eyl. 09, 2009 3:18 pm

(Mizah Soslu Programcılık Yazısı)



Windows işletim sisteminde sürükle-bırak tekniği asıl Windows 95 ile yaygın bir şekilde kullanılmaya başlanmıştır. Sürükle-bırak tekniği değişik amaçlarla kullanılsa bile konu programcılık dersleri olduğunda ilk akla gelen örnek ListBox'lar arası eleman taşıma ve kopyalamadır. Bu nedenle sürükle-bırak tekniğini anlatan hocalar forma 2 ListBox yerleştirip birisinden diğerine eleman taşıma ve kopyalamadan söz ederler. Her ne kadar programcılık derslerinde sürükle-bırak tekniği anlatılırken genellikle ListBox'lardan yararlanılıyor olunsa bile forma 2 ListBox nesnesi yerleştirme işlemi ilk olarak 2003 yılında bir Türk programcılık kitabı yazarı tarafından akıl edildi. Umarım mesleğinin zirvesinde olan bu yazarımız forma 2 ListBox yerleştirmeyi ilk kez kendi(leri) akıl ettiği için bizi fikrini çalmakla tekrar suçlamaz.



Sürükle-bırak tekniğini anlatmak için forma 2 ListBox yerleştirdim ve ilk ListBox'a bir basketbol takımının 10 oyuncusunun adını aktardım. Tabi şimdi bu oyunların üçü hariç hepsi başka takımlarda oynuyorlar. Sürükle-bırak tekniği ile bu 2 ListBox arasında eleman taşımak istediğim için Properties penceresinde her 2 ListBox'ın AllowDrop özelliğini true yaptım. Bu özellik false iken söz konusu nesne sürükle-bırak işlemine izin vermez.



ListBox'lar Arası Sürükle-Bırak Tekniği Surukle_birak_1



Tahmin edeceğiniz gibi benzer sürükle-bırak örneğine birçok kaynakta rastlamanız mümkündür. Benim bildiğim ilk Visual Basic sürümünden bu yana birçok yazar bu örneği kitaplarında kullanıyorlar. Tabii şimdi birileri çıkıp ListBox'lar arası eleman sürükleyip bırakma benim keşfim derse gülüp geçmeyiniz, forma 2 ListBox yerleştirmek öyle sıradan insanların aklına gelebilecek bir fikir değildir(!).



Sürükle-bırak işlemini en basit şekilde anlatmak üzere forma 2 ListBox yerleştirmek öyle herkesin akıl edebileceği bir eylem olsaydı birisi prof unvanlı 3 bilgisayar mühendisinden oluşan ekip bu konuda söz konusu yazarlar ile aynı fikirde olmazlardı. Kendim önceleri çabaladım ve dedim ki görsel programlama araçlarının geliştiren Microsoft firması ListBox sınıfını hazırlayıp verdiğine göre birilerinin bu sınıflardan yararlanması normaldir diyordum ama artık vazgeçtim ve forma 2 ListBox yerleştirmeyi ilk kez 2003 yılında yerli bir programcılık kitabı yazarı akıl etti gerçeğine şapka çıkarmaya başladım. Bu gerçek yani Sürükle-bırak işlemine örnek olması için forma 2 ListBox yerleştirmeyi akıl etme gerçeği ortada dururken birileri kalkıp bu ülkenin neden bir Hindistan olamadığını ve yazılımda neden geri kaldığını soruyor.




Bu ön bilgiden sonra sürükle-bırak işlemini ListBox'lar üzerinde anlatmaya devam edelim. Sürükle-bırak işlemi ilk ListBox'ta istenen seçeneğin tıklanması ile başlayacağı için ilk ListBox'ın MouseDown olayını temsil eden metodu aşağıdaki gibi düzenledim. Bu metotta kullandığım 'sira' değişkenini diğer metotlarda kullanmak istediğim için metotlarında dışında Class bloğu içinde tanımladım. Tabii ki bazı arkadaşlar hemen müdahale edip sürükle-bırak işlemi için bu "sira" adını verdiğin değişkene ne gerek var diyecekler. Bu arkadaşlardan biraz sabırlı olmalarını isteyeceğim.



int sira;
private void listBox1_MouseDown(object sender, MouseEventArgs e)

{
Point nokta = new Point(e.X, e.Y);

sira = listBox1.IndexFromPoint(nokta);
if (e.Button == MouseButtons.Left)

listBox1.DoDragDrop(listBox1.Items[sira].ToString(),
DragDropEffects.All);
}




Bu kod hakkında bilgi vermeden önce burada yapılan işlem hakkında 2003 yılı sonunda özel bir Türkçe programcılık kitabı yayınlanmadan önce bırakın Türkiye'yi dünyada kimsenin bilgisi yoktu(!) tespitini yapalım. Her ne kadar .NET'le ilgili bütün ayrıntılar 2001 yılında yayınlanmış olsa bile burada yapılan işlemin patenti yerli bir yazara aittir(!). Yani bu Türkçe C# kitabı yayınlanmadan önce bu konuda bırakın Memik Yanık'ı Türkiye'de hiç kimsenin bir şeyler yazmış olması ihtimal dışıdır.



Bu kodda yararlandığım IndexFromPoint() metodu ListBox'ın tıklanan elemanın sıra numarasını öğrenmemizi sağlıyor. Bu metot Point tipinde bir parametreye sahip olduğu için farenin o anki koordinatlarından yola çıkıp Point nesnesi hazırladım. Bu kodda tanımlanan değişkenlere ve nesnelere verilen adlar herkesin aklına gelebilme ihtimali karşısında bu kodu bir de aşağıdaki gibi düzenledim. Bu sayede kendimi değişken adı çalma suçlamasından belki bu kez kurtarırım. Tabii seçilen değişkenlerin adları güzel olmadığında yazılan kodun yavaş çalışması(!) sorununu hoş karşılamak gerekir.



int sira_sira;
private void listBox1_MouseDown(object sender, MouseEventArgs e)

{
Point kor_nokta = new Point(e.X, e.Y);

sira_sira = listBox1.IndexFromPoint(kor_nokta);
if (e.Button == MouseButtons.Left)

listBox1.DoDragDrop(listBox1.Items[sira_sira].ToString(),
DragDropEffects.All);
}




Bu örnekte kullandığım ilk ListBox elemanlarla dolu olduğu için eleman olmayan bir yerini tıklama imkânı yoktur. Her ihtimale karşılık kullanıcının kaynak ListBox'ın eleman olmayan bir yerini tıklayıp tıklamadığını aşağıdaki gibi kontrol edebilirsiniz. ListBox sınıfının MouseDown olayını temsil eden metodun 'e' adındaki 2. parametresinin MouseEventArgs tipinde olduğuna dikkatinizi çekmek istiyorum. Her ne kadar MouseEventArgs tipindeki bu parametreye 'e' adının verilmesi Visual Studio'nun, dolayısıyla Microsoft'un tercihi olsa bile sizler değişken adı çalmış olmamak için 'e' yerine bir hayvan adını parametre adı olarak kullanabilirsiniz.



int sira_sira;
private void listBox1_MouseDown(object sender, MouseEventArgs e)

{
Point kor_nokta = new Point(e.X, e.Y);

sira_sira = listBox1.IndexFromPoint(kor_nokta);
if (sira_sira == -1)

{
MessageBox.Show("Eleman olmayan bir yeri tıkladınız";
return;
}

if (e.Button == MouseButtons.Left)
listBox1.DoDragDrop(listBox1.Items[sira_sira].ToString(), DragDropEffects.All);

}



Bu metotta ilk olarak Point tipinde bir değişken tanımlanarak ListBox1'in tıklanan yeri öğrenilmektedir. Ardından Point tipindeki 'kor_nokta' değişkeninden yararlanıp üzeri tıklanan elemanın sıra numarası öğrenilip 'sira_sira' değişkenine aktarılmaktadır. İzninizle hemen ekleme yapalım: Forma 2 ListBox eklemeyi ilk kez akıl eden yazarlarımız, kullanıcının ListBox'ın eleman olmayan yerlerini tıklama ihtimaline karşılık tedbir almayı 2003 yılında akıl etmemişlerdir. Bu nedenle bu kodda IndexFromPoint() metodunun geriye gönderdiği değerin -1 olup olmadığını gönül rahatlığıyla kontrol edebilirsiniz.



Bu kodda en son olarak DoDragDrop() metodu ile ListBox'ın söz konusu elemanı alınmakta, başka bir deyişle sürükle-bırak işlemi başlatılmaktadır. Sürükleme pozisyonundaki fare işareti 2. ListBox'ın üzerine götürüldüğü zaman meydana gelecek DragOver olayını temsil eden metodu aşağıdaki gibi düzenledim.



Başka bir deyişle aşağıda verdiğim kod, kullanıcı istediği elemanı sürükleme pozisyonunda ilk ListBox'tan alıp 2. ListBox'ın üzerine götürdüğü zaman işletilecektir. Bu metotla ilgili olarak dikkatinize sunmak istediğim önemli bir nokta var: ListBox sınıfının DragOver olayını temsil eden metodunun DragEventArgs tipindeki 2. parametresidir. Hiç boşuna uğraşmayın; DragOver olayını temsil metodun 2. parametresi mutlaka DragEventArgs tipinde olmalıdır. Yani sürükle-bırak işlemini anlatmak üzere forma 2 ListBox yeleştirmeyi ilk aklı eden yerli yazar ortaya çıkıp böyle bir metodu ilk kez 2003 yılı sonunda ben yazdım derse "haklısınız hocam" derseniz böyle bir metot yazdığınız için belki sizi affedebilir.



private void listBox2_DragOver(object sender, DragEventArgs e)

{
if (e.KeyState == 1)
e.Effect = DragDropEffects.All;
}




DragOver olayı meydana geldiği zaman farenin sol tuşu basılı durumda ise DragEventArgs tipindeki 'e' parametresinin KeyState özelliği 1 değerini içermektedir. Farenin sol yerine sağ tuşu basılı durumda olsaydı KeyState özelliği bu kez 2 değerini içerirdi. Fare ile ilk ListBox'tan 2. ListBox'a eleman taşırken kullanıcı sol tuş ile birlikte ayrıca Shift tuşunu basılı durumda tutuyorsa KeyState özelliği bu kez 1 4 yani 5 olur.



Benzer şekilde Ctrl tuşu basılı halde iken sürükle-bırak işleminin yapılmasını istiyorsanız ListBox2'nin DragOver olayını temsil eden metotta DragEventArgs tipindeki 'e' parametresinin KeyState özelliğinin 1 8=9 olup olmadığını aşağıdaki gibi kontrol etmelisiniz.



private void listBox2_DragOver(object sender, DragEventArgs e)

{
if (e.KeyState == 9)
e.Effect = DragDropEffects.All;
}




Bu kod başka türlü yazılamayacağı için değişken, metot ve nesne adı çalma suçlamasıyla karşılaşmamak için tek çare Visual Studio'nun seçtiği metot ve parametre adına bağlı kalmamaktır. Bu nedenle Visual Studio'nun her form için hazırladığı Designer ön adlı ikinci kod dosyasında ayarlama yapmak şartıyla bu metodun adını aşağıdaki düzenleyebilirsiniz. Böylece bu iki kodu karşılaştıran öğretim üyesinin ve Ankara'lı programcılık kursu sahibinin hışmından kendimizi kurtarmış oluyoruz.



private void fenerbahceyi_surukle(object sender, DragEventArgs e)

{
if (e.KeyState == 9)
e.Effect = DragDropEffects.All;

}



Tabi sizler bu değişikliği biraz daha ileriye götürüp bu metodun parametrelerine aşağıda yapıldığı gibi farklı adlar verebilirsiniz. Böylece parametre adı hırsızı olma olasılığı biraz daha azalmış olur.



private void fenerbahceyi_surukle(object recep_ivedik, DragEventArgs cem_yilmaz)

{
int ankara_kalesi = 9;
if (cem_yilmaz.KeyState == ankara_kalesi)

cem_yilmaz.Effect = DragDropEffects.All;
}



Farenin sol tuşu ile birlikte hem Ctrl hem de Alt tuşu basılı iken sürükleme yapılmasına izin vermek istiyorsanız KeyState özelliğinin 1 8 32=41 olup olmadığını kontrol etmelisiniz. Sürükle-bırak işlemi için geriye bir tek kullanıcı farenin sol tuşunu ListBox2'nin üzerinde iken serbest bıraktığında işletilecek metotta söz konusu elemanı 2. ListBox'a dahil etmek kaldı.




private void listBox2_DragDrop(object sender, DragEventArgs e)

{
listBox2.Items.Add(listBox1.Items[sira_sira]);

}



2. ListBox'a aldığınız elemanı 1. ListBox'tan silmek istiyorsanız bu metoda 2. bir satır yazıp Remove() metodu ile bu elemanı ilk ListBox'tan silmelisiniz. Her ne kadar aşağıda verilen kod sayesinde ListBox'lar arası eleman taşıma işlemi yapılsa bile bu gerçek bir sürükle bırakma işlemi değildir.Yani aşağıda verilen kodda ne mi yaptım? Sürükle-bırak bırak işleminden söz edip durdum ama son adımda ListBox'lar arası eleman taşımayı başka bir teknikle yaptım. Bu bir anlatma tekniğidir.



private void listBox2_DragDrop(object sender, DragEventArgs e)

{
listBox2.Items.Add(listBox1.Items[sira_sira]);

listBox1.Items.Remove(listBox1.Items[sira_sira])
}




İzninizle tam bu noktada araya girip ek açıklama yapayım:2004 yılında yayınlanan C# kitabımda nedense(belki yer yokluğundan belki unuttuğumdan....) bu işlemi anlatmayı yarım bırakmışım. Yani her ne kadar kitapta sürükle-bırakma işleminden söz edilse bile bu işlemi anlatmayı tam bu noktada bırakmışım.



Formdaki ilk ListBox'ın elemanlarını sürükleyip 2. ListBox'ın üzerine bırakma işlemini özetlemek gerekirse; öncelikle ListBox'ların AllowDrop özelliklerini true yaptık. Ardından İlk ListBox'la ilgili olarak MouseDown olayı meydana geldiğinde yani kullanıcı ilk ListBox'ı tıkladığında seçtiği elemanın ListBox'ın kaçıncı elemanı olduğunu öğrenip daha önce tanımladığım 'sira_sira' adlı int tipindeki değişkene aktardım.



İlk ListBox'ın sürüklenip 2. ListBox'a aktarılacak elemanın hangisi olduğunu başka metotlarda iken bilmem gerekeceği için bu değişkenin Class'ın her yerinde yaşamasını sağladım. Yukarıda yapılan bütün bu hazırlıklara rağmen fare işareti henüz ilk ListBox'ın üzerinde iken taşınma işleminin yapıldığı işaret edilmez. Bu sorunu gidermek için ilk ListBox'a ait DragEnter olayını temsil eden metodu aşağıdaki gibi düzenledim.



private void listBox1_DragEnter(object sender, DragEventArgs e)

{
if (e.KeyState == 1)
e.Effect = DragDropEffects.Move;
}




Şimdi aynı örneği başka bir teknikle yapacağım. Bu tekniğin farklılığı sürükle-bırak işlemi sırasında panodan yararlanıyor olmamdır. Doğru olanı da sürükle-bırak işlemini yaparken panodan yararlanmaktır. Çünkü sürükleme işlemi boyunca sürüklenen nesne geçici olarak panoya alınmaktadır.



Başka bir anlatımla ilk ListBox'a seçilip sürüklenen eleman Windows tarafından otomatik olarak panoya alındığı için ilk ListBox'ın MouseDown olayını temsil eden metotta yukarıda 'sira_sira' adını verdiğim değişkeni tanımlamaya gerek yoktur. O halde neden yukarıda bu işlemi panodan yararlanmadan yaptım? Bu bir anlatma tekniğidir, bu ilk okumada anlamayı sağlamak için tercih edilen bir işlemdir. Bu nedenle birileri çıkıp Memik Yanık okuru yanlış yönleniriyor derse hiç şaşırmayınız nede olsa onlar forma ListBox yerleştirmeyi ilk akıl edenlerdir.



private void listBox1_MouseDown(object sender, MouseEventArgs e)

{
Point kor_nokta = new Point(e.X, e.Y);

int sira_sira = listBox1.IndexFromPoint(kor_nokta);
if (sira_sira == -1)

{
MessageBox.Show("Eleman olmayan yeri tıkladınız";
return;
}

if (e.Button == MouseButtons.Left)
listBox1.DoDragDrop(listBox1.Items[sira_sira].ToString(), DragDropEffects.All);

}



2. ListBox'ın DrogOver olayını temsil eden metotta bir değişiklik yapmayacağım için direk DragDrop olayını temsil eden metoda geçtim. MouseDown olayı ile sürükle-bırak işlemi başlatıldığında sürüklenen nesnenin(burada ListBox'ın ilgili elemanı) bir kopyası panoya alındığı için panodan okuma yapıp 2. ListBox'a yeni eleman olarak eklemek gerekiyor. Bu işlemin nasıl yapıldığını aşağıda görebilirsiniz.



private void listBox2_DragDrop(object sender, DragEventArgs e)

{
string hos_eleman=Convert.ToString(e.Data.GetData(DataFormats.Text));

listBox2.Items.Add(hos_eleman);
listBox1.Items.Remove(hos_eleman);
}




Hedef nesne durumundaki ListBox2'nin DragDrop olayını temsil eden metodun DragEventArgs tipindeki 'e' parametresinin Data özelliği panoyu temsil etmektedir. Panodan okuma yapılırken GetData() metodunu kullanmak gerekmektedir. Bu metot panodan okunacak bilginin tipini parametre olarak almaktadır. Panodan okuyacağım bilgi text tipinde olduğu için parametre olarak DataFormats.Text sabitini kullandım. Lütfen dikkat: .NET'i internet kelimesinin üç harfi sanan Ankaralı öğretim üyesinin birisi sizi "e" adlı parametrenin adını çalmakla suçlayabilir.
Sayfa başına dön Aşağa gitmek
https://yazilimnet.yetkin-forum.com
 
ListBox'lar Arası Sürükle-Bırak Tekniği
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» Siyah-beyaz resmi boyama tekniği
» Ülkeler arası saat
» Tablolar Arası İlişkiler - DataRelation Sınıfı

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
Yazilim Öğrenmenin Tek Adresi... :: Masaüstü Programlama :: C#-
Buraya geçin: