C#nedir?com
 
YAZAR HAKKINDA
Caner Şahan
Caner Şahan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
24 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Caner Şahan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 13.4.2004
Okunma Sayısı : 57150
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 12.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 12.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 12.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 12.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C# ile DragDrop(Sürükle-bırak) İşlemleri
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Merhabalar öncelikle yeni bir yazıda buluşmaktan memnunum.Bu yazımda C# ile drag-drop işlemlerinden bahsedeceğim. Yani visual programlamanın önemli unsurlarından biri. Programcılar açısından düşünürsek fazla önemli gelmeyebilir belki ama son kullanıcılar için oldukça önemli. İşlemlerin görsel olması maliyetleri o kadar düşürüyor(en azından eğitim masraflarını).

Ne Yapacağız

Uygulama olmadan yazılım olmaz diyerek kendimize bir alan seçerek yazılımımızı buraya uyarlayalım. Kendimi bir bilet satan gişe görevlisinin yerine koydum ve yapacağım işlemi düşündüm. Bu kolay bi iş olmalıydı.Yani bir iki tıkta bu iş bitmeliydi. Nitekimde bizim gelecek ve şimdiki zaman dostumuz C#, visual basic’ten bu özellikleri birer birer almış. İnsan bunları yaparken C#’a bir kere daha hayran kalıyor. Hem C’nin esnekliği ve zarifliği hemde visual basicin görselliği...Neyse fazla konudan uzaklaşmadan yapacağımız uygulamanın bir şekli aşada verilmiştir.



Yani ben bilet satarken "bilet al"daki resmi sürükleyip almak istediğim koltuğa sürükleyip bırakacam ve bundan sonra haliyle koltukta artık "boş" değil "dolu" yazacak.Aynı koltuğu bir daha almak istersem bana bir hata mesajı verecek. Ve biletlerin durumunu izlemek için listbox’a ne olup bittiği yazılacak.Reset buttonu tüm uygulamayı sıfırlayacak. Bilet iptal ise bu resmin altındaki resmi sürükleyip koltuğa götürdüğümüzde koltuğu boşaltacak.Birde durum buttonu ile sistemin doluluk oranını öğrenebileceğiz.İşte bu kadar. Drag-Drop’ta Kullanılan eventlar:

Drag olayını başlaması için öncelikle bir yerlere tıklamamız gerekir değil mi? Bu yüzden Drag olayını başlatacak MouseDown olayı bizim start noktamız olacak. Daha sonra drop olayı iki kademe gerçekleşecek. Birinci aşamada gidilecek yere kadar sürüklenmesi yani bunun C#’ta karşılığı DragOver. İkinci ve son aşama ise hedefte bu drag’lenen nesnenin drop olarak alınması ki bu DragDrop event oluyor.Aşadaki şema ile daha anlaşılır bir durum yakalanmaya çalışılıyor...

Program:

Programda yukarıda görülen algoritma parçasında dikkat etmemiz gereken yerlerden biri drop’u alacak nesnenin allowdrop=true olması. Bu can alıcı noktalardan biridir. Drop’lanacak nesnelerin bütün allowdrop özelliklerini kodla veya properties’den ayarlayalım. Şimdi yukarıdaki algoritmaya sadık kalarak devam edersek. İlk önce mousedown event’imizi yazalım.(tabiki bu event sürükleyeceğimiz nesneye ait)

private void satınal_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
           if(e.Button==MouseButtons.Left)
           {
               satınal.DoDragDrop(satınal.Image,DragDropEffects.All);
           }
}
Burada MouseEnetArgs’dan türemiş e nesnesi bizim mousebutton kontrolü yapmamıza yarıyor. Birde winform nesnesinin drag’i başlatan .DoDragDrop ile neyi nasıl dragdropa başlatacağımızı karar veriyor.Yani biz mouse’umuzun sol tuşuna bastığımız sürece dragdrop olayı başlangıçta. Daha sonra ne demiştik gidilecek nesnenin dragover eventı çalışacaktı. Şimdi bu eventı inceliyelim. Bu event ile dragdrop olayı başlayan nesneyi form üzerinde sürüklemekle bu nesneyi kopyalamaktan başka bir şey yapmayacaz. Birde burda e.KeyState değeri bizim mouse’un hangi tuşuna bastığımıza veya ctrl,shift tuşlarından hangisine bastığımızı kontrol için geliştirilmiş sadece Dragover eventına has bir özelliktir. Aşağıda keystate tablosu verilmiştir.

e.KeyState değeri Anlamı
1 Mousee’un soltuşu basılı anlamına gelir
2 Mousee’un sağ tuşu basılı anlamına gelir
5 Shift tuşu basılı anlamına gelir
9 Ctrl tuşu basılı anlamına gelir.


private void koltuk1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
       if(e.KeyState==1)
      {
         e.Effect=DragDropEffects.Copy;
       }
}
Ve geldik son aşamaya burada drop olayı meydana gelicek nesnenin DragDrop eventına yapacağımız işlemi yaparız. Ben programımda her koltuğu bir label olarak gösterdim ama işin aslı hepsini bir koltuk dizisi olarak göstermektir.Dizi olarak gösterdiğimizde haliyle kontrol etmek istediğimiz zaman bunu döngüyle halledebiliyoruz.Ama 5 koltuklu bir yapımız olduğu için dizi gereksinimi fazla yok. Yaptığımız olayda koltuk aldığımız zaman dolu yazacaktı daha doğrusu dolu pictureboxının resmi gözükecekti. Yani resmi değiştirecez. Sonra bu koltuk satıldı diye bir durum belirtecez.

private void koltuk1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
    if(e.Data.GetData(DataFormats.Bitmap)==iptal.Image)
    {
        if(koltuk1.Image==bos.Image)
            koltuk1.Image=bos.Image;
        else
        {
            koltuk1.Image=bos.Image;
            listBox1.Items.Add("1 nolu koltuk iptal edildi");
        }
    }
    if(koltuk1.Image==dolu.Image)
    {
        MessageBox.Show("Bu koltuk satılmış alamazsınız");
    }
    else
    {
        if(e.Data.GetData(DataFormats.Bitmap)==satınal.Image)
        {
            koltuk1.Image=dolu.Image;
            listBox1.Items.Add("1 nolu koltuk satıldı");
        }
    }
}
Not: Yukarıdaki örnekte sadece koltuk1’in drag-dropu yapılmıştır. Diğer koltukları yapmak için bunları tek tek yapmalıyız. İşte bu noktada dizinin çok önemli olduğu göze çarpıyor ama neyse bizde koltuk sayısı az olduğu için çok önemli değil.

Son Söz: Umarım merak edilen bir konuyu aydınlatmışımdır.Bu noktada makaleme son veriyorum. Ve çok alakasız bir konuya gidiyorum. Transmission Lines adlı formül kağıtlarının ve notlarının içine girip perşembe günkü bu zor vizeye hazırlanıyorum....:(

University of Istanbul Dep.of Electronic CANER ŞAHAN

canersahan@hotmail.com kaynak kodlar için>>>

Makale:
C# ile DragDrop(Sürükle-bırak) İşlemleri C#, Visual C# ve .NET Caner Şahan
  • Yazılan Yorumlar
  • Yorum Yaz
NİS
29
2010
Hocam elinize sağlık. Picture i taşırken kesik çizgi ile hayalet picture yapabilirmiyiz.
OCA
17
2010
Merhaba benim size bir sorum olacak; neden bilemiyorum uygulama içinde drag drop yapabilirken dısarıdan dosya atarken sorun oluyor; diğer bilgisayarlarda kodlar calısırken benimkinde çalısmıyor. Windows 7yle bir alakası olabilir mi? cunku socket denemesi yaparkende benzer bir problemle karsılasmıstım. Bu arada sızın yazdıgınız bu programda bende calısmıyor; oylece duruyor:) hiç bir tepki vermiyor:(
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor