|
Windows Ortamında Sürükle Bırak İşlemleri (Drag&Drop) |
|
Gönderiliyor lütfen bekleyin... |
|
|
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
[email protected]
Makale:
Windows Ortamında Sürükle Bırak İşlemleri (Drag&Drop) C#, Visual C# ve .NET Emrah Yiğit
|
|
|
-
-
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
|
|