Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ASP.NET
C# / VC#/.NET
YAZAR HAKKINDA
Emrah Yiğit
http://www.csharpnedir.com/
İletişme geçmek için
tıklayın
.
6
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:
anindaki
basildigini
basili
bastigimizda
degeri
degerini
herhangi
islemi
islemine
keystate
olaylari
olmadigini
picturebox
sirasinda
tusuna
C# / VC#/.NET
Emrah Yiğit
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
:
9.7.2005
Okunma Sayısı
:
39371
Yorum Sayısı
:
10
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Burak Selim Şenyurt
Bellek Yönetiminde Verimlilik için İpuçları (Rust Odaklı)
13.7.2025
Burak Selim Şenyurt
Rust ve Güvenli Bellek Yönetimi Hakkında
13.7.2025
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
Emrah Yiğit
/
C# / VC#/.NET
/
Windows Ortamında Sürükle Bırak İşlemleri (Drag&Drop)
Windows Ortamında Sürükle Bırak İşlemleri (Drag&Drop)
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
Bu makalemizde, Windows ortamında bize vazgeçilmez kolaylıklar sağlayan Sürükle ve Bırak(Drag and Drop) teknolojisini, uygulamalarımızda nasıl kullanabileceğimiz hakkında küçük bir örnek geliştireceğiz. Her teknolojinin komplex bir tarafı olduğu gibi, D&D teknolojisininde bazı komplex tarafları bulunmakta. Bu da sürükle işlemi gerçekleştiği anda, klavye veya faremizde basılı olarak tuttuğumuz bazı tuşlarla ilgilidir. Örneğin; sürükle işlemi sırasında hiç bir tuşa basmadığımızda veya SHIFT tuşuna bastığımzda bu taşıma(move), "Ctrl" tuşuna bastığımızda bu kopyalama(copy), "ALT" tuşuna bastığımızda ise bu belirtilen dosyanın kısayolunu(Shortcut), belirli bir yere yerleştirir. Peki bu işlemler sırasında bu tuşlara basılı olduğunu nasıl anlarız? İşte bu konuda bize
Keystate
ve bazı
Bitwise Operatatörler
yardımcı olacak.
Bitwise Operatörler
Bu operatörler tamsayı, karakter gibi değişkenlerin sayısal değerlerinin üzerinde değil de doğrudan 0 ve 1 lerden oluşan bitlerini değiştirmek, sınamak veya ötelemek için kullanılır. 6 tane bitwise operatör bulunur. Bunlar;
&
And Operatörü
|
Or Operatörü
^
XOR Operatörü
~
The Ones Complement(Bir’e Tümleme)
<<
The Left Shift Operator(Sola Öteleme)
>>
The Right Shift Operator(Sağa Öteleme)
Biz bu uygulamamızda (&) AND operatörünü kullanacağız. Şimdi bu operatörün özelliklerine bakalım.
(&) The AND Operator
AND Operatörü 2 biti karşılaştırır ve sadece 2 bitin 1 değerini aldığı yerde sonuç yine (1) değerini alır. Diğer durumlar (0) Sıfır’dır.
1
&
0
=
0
1
&
1
=
1
0
&
0
=
0
0
&
1
=
0
Şimdi bu operatörü kullanarak işlem sırasında hangi tuşa basıldığını öğrenelim.
Keystate
bu tür işlemler anında mouse veya klavye tuşlarından hangisine basıldığı bilgisini tutan 0 ve 1 rakamlarından oluşan uzun bir sayıdır. Her bir tuşun değeri bu sayı içinde saklıdır. Örnek ; Farenizin sol tuşuna basıldığında Keystate deki ilk bit "1" olacaktır.
Bit
Anahtar (Key)
1
Left Mouse Button
2
Right Mouse Button
4
SHIFT button
8
CTRL button
16
Middle Mouse Button
32
ALT button
Yukarıda verdiğimizi bilgileri uygulamaya dökersek.
İşlemler sırasında "Ctrl" tuşuna bastığımızda Keystate de bulunan sayının 3. biti 1 olmalıdır. Bu değer ;00001000 olabilir.
Uygulama anındaki basılan tuşlar arasında "Ctrl" olup olmadığını anlamak için "Keystate" deki değeri, yukarıda tabloda verdiğimiz değerler ile AND işlemine sokarız.
00001000 & (Sadece Ctrl)
00001000
- - - - - - - - - - - -
00001000 (Sonuç yine aynı değer, yani 3. bitin değeri 1 dir. Bu "Ctrl" tuşuna basıldığını gösterir.)
00001001 & (Ctrl + Left Mouse Button)
00001000
- - - - - - - - - - - -
00001000 (İşlem sırasında basılan tuşlar arasında "Ctrl" olduğundan dolayı sonuçta 3. bitin değeri 1 dir. Bu "Ctrl" tuşuna basıldığını gösterir. Bu durumda Keystate değeri 9 fakat bu işlem sonucu çıkan sonucun 10 luk tabandaki değeri 2 üzeri 3 den 8 dir.)
00100110 &
00001000
- - - - - - - - - - - -
000000000 (3. Bitin değeri (0) ve bu "Ctrl" tuşuna basılmadığını gösterir.)
Bu durumda Keystate değeri 38 sayısını fakat sonuç bize (0) döndürecektir.
Uygulama
Bu bilgiler ışığında gelin Sürükle ve Bırak (Drag and Drop) uygulamamızı inşa etmeye başlayalım. Uygulamamız bir PictureBox’dan diğerine sürükle bırak yöntemiyle nasıl resim taşıma veya kopyalama yapabileceğimizi gösterecek. Visual Studio.Net i açarak bir Visual C# Windows Application açalım.
Şimdi sıra formumuzu tasarlamaya geldi. İki adet PictureBox oluşturup, herhangi bir tanesine resim yerleştirerek tasarımı bitirelim.
Uygulamamız 3 adet Event (olay) ile oluşmakta. Bunlar ;
1 - MouseDown ( Bu resim kutularından herhangi birine mouse ile tıklanıldığına olacak olayları içerir)
2 - DragEnter (Resmi sürükleme anında yapılacaklar)
3 - DropDrag (Son olayımızda resmi herhangi bir resim kutusuna üzerine bırakma(drop) olayıdır)
Bu 3 olayı her iki resim kutusu için yazacağımız için bunlar bağımsız metodlar olacaktır. Şimdi sıra kodları yazmaya geldi.
private void Form1_Load(object sender , System.EventArgs e)
{
// Picturebox lara resim drop edilme özelliğini true olarak ayarlıyoruz.
pictureBox1.AllowDrop = true ;
pictureBox2.AllowDrop = true ;
} // Bu Metod PictureBoxlara tıklanıldığında yapılacakları içerir.
private void pic_mousedown(object sender , System.Windows.Forms.MouseEventArgs e)
{
// Belirtilen resme sol mouse buttonuyla basıldığını kontrol ediyoruz.
if (e.Button == MouseButtons.Left)
{
// PictureBox objemizi oluşturuyoruz.
PictureBox pb = (PictureBox)sender;
// PictureBox için de eger bir resim verisi bulunuyorsa, sürükle bırak işlemine başlıyoruz.
if (pb.Image != null)
{
pb.DoDragDrop(pb.Image, DragDropEffects.Move | DragDropEffects.Copy);
}
}
}
// Bu metod ise sürükleme anındaki olayları içerir.
private void pic_dragenter(object sender , System.Windows.Forms.DragEventArgs e)
{
// İlk Başta gönderilen datanın bir resim olup olmadığını kontrol ediyoruz.
if (e.Data.GetDataPresent(DataFormats.Bitmap))
{
// Sürükleme işlemi sırasında "CTRL" tuşuna basılı olup olmadığını kontrol ediyoruz.
if ((e.KeyState & 8) == 8) // Ctrl tuşu ile taşıma.
{
// Basılıysa , o zaman fare işaretçisinin yanında küçük bir (+) belirecektir.
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.Move;
}
}
else
{
e.Effect = DragDropEffects.None;
}
}
// Bu method PictureBox lara resim bırakma(drop) anındaki olayları içerir.
private void pic_dragdrop(object sender , System.Windows.Forms.DragEventArgs e)
{
// Resmi belirtilen PictureBox a ekliyoruz.
PictureBox pb = (PictureBox)sender;
pb.Image = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
// Eğer Ctrl tuşuna basılmışsa resmi aldığımız yerdeki resmi silmemeliyiz, aksi olursa resmi aldığımız pictureBox içindeki değere null değerini vermeliyiz.
if ((e.KeyState & 8) != 8)
{
if (pb.Name == "pictureBox1")
{
pictureBox2.Image = null;
}
else
{
pictureBox1.Image = null;
}
}
}
Bu 3 methodumuzu yazdıktan sonra, sıra bunları form controllerimize bağlama işlemine gelmiştir.
Yalnız bu uygulamayı her iki PictureBox(resim kutusu) içinde yapmalıyız.
Şimdi sıra programımızı çalıştırmaya geldi. Sonuç olarak uygulamamız söyle bir hal alacaktır.
Sürükle ve Bırak işlemini yalnızca resimleri taşımak için değil, bir çok alanda kullanabiliriz ve bu uygulamalarımıza çok büyük kolaylık ve esneklik katacaktır. Umarım yararlı bir makale olmuştur.Bir sonraki makalemizde görüşmek üzere...
Emrah YİĞİT
emrahyigit@gmail.com
Makale:
Windows Ortamında Sürükle Bırak İşlemleri (Drag&Drop) C#, Visual C# ve .NET Emrah Yiğit
Yazılan Yorumlar
Yorum Yaz
OCA
7
2007
Emrah Yigit
/
üye hakkında
Merhaba, öncelikle ilginiz için teşekkür ederim. Söyledikleriniz çok doğru. Yapılan örnek iki picturebox içindir dolayısıyla 2 den fazla pictureBox kullanacağımız örneklerde öncelikle global bir değişken olarak PictureBox p1 değişkenini oluşturmalı, ikinci olarak ise pic_mousedown() eventi içinde p1 = (PictureBox)sender eşitliğini yapmalıyız. Son olarak pic_dragdrop adlı event içinde ise p1.Image = null ifadesini kullanarak sorunu çözebiliriz. Kolay Gelsin.
OCA
7
2007
blumpy blumpy
/
üye hakkında
Hocam sorunu cozdum ve olayı tamamladım. Lakin soyle onemli bir sorun war. Siz sadece 2 picturebox kullanıp akınanı null yapmıssınız. Ama bende cok picturebox war. Dolayısıyla if ile kontrol etmek cok mantıksız. Move deyince aslında aldıgı yeri bosaltması lasım gibi ama oda olmuyor. Aldıgım yerdeki image yi nasıl bosaltırım bi turlu yapamadım. Tesekkürler...
OCA
7
2007
blumpy blumpy
/
üye hakkında
VS.NET 2005 te kodlarda ufak değişiklikler olma ihtimali warmıdır hocam. Cunku hata almama ragmen uygulamayı beceremiyorum... Teşekkürler...
NİS
18
2006
sinan uyanık
/
üye hakkında
Tamamdır yaptım sonunda sağolun herşey için..
NİS
18
2006
sinan uyanık
/
üye hakkında
Tamamdır yaptım sonunda sağolun herşey için..
NİS
17
2006
sinan uyanık
/
üye hakkında
Peki bu 2005 de farklı mı ?? Ben yapamadım olmadı yani..
AĞU
10
2005
Selçuk ÖZDOĞAN
/
üye hakkında
Tam olarak böyle bi döküman arıyordum. Çok teşekkürler.
AĞU
10
2005
Selçuk ÖZDOĞAN
/
üye hakkında
Tam olarak böyle bi döküman arıyordum. Çok teşekkürler.
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl