int i = -1;
int[][] yollar = new int[4][];
bool dragging;
Adım 5: Şimdi PictureBox nesnelerini diziye aktaralım. Bu işlemi ayarlar() metodunda yapacağız.
img = new PictureBox[] { img1, img2, img3, imgOriginal };
Adım 6: Resmin sahnede gideceği yolu belirleyen dizi elemanlarına girişleri yapalım. Resmin L tipinde hareket etmesini istiyoruz.
yollar[0] = new int[] { 1, 2 };
yollar[1] = new int[] { 0, 3 };
yollar[2] = new int[] { 0, 3 };
yollar[3] = new int[] { 1, 2 };
Adım 7: Başlangıçta sürükle bırak işleminin olmadığını belirlemek için dragging değişkeninin değerini belirleyelim.
dragging = false;
Adım 8: Öncelikle ilk resmi ikinci resme sürükleyip bırakma işlemini gerçekleştirelim. İlk resmi seçelim ve bu resmin MouseDown olayını oluşturalım.
private void img1_MouseDown(object sender, MouseEventArgs e)
{
}
Adım 9. Bu resme basıldığında resmin sıra numarasını saklamak için i değişkenine değeri aktaralım.
private void img1_MouseDown(object sender, MouseEventArgs e)
{
i = 0;
}
Adım 10: Bu resim seçildiğinde iki nolu resmin sürükle bırak işleminde aktif olabilmesi için AllowDrop özelliğini true yapalım.
img2.AllowDrop = true;
Adım 11: Resmin kullanılabilir olabileceğini belirlemek için BorderStyle özelliğini Fixed3D yapalım. Projeyi kaydedip çalıştıralım.
img2.BorderStyle = BorderStyle.Fixed3D;
Adım 12: Dikkat ettiyseniz img2 sürekli gidilecek yol olarak seçili kalacaktır. Bunu iptal etmek için MouseUp olayını düzenleyelim.
private void img1_MouseUp(object sender, MouseEventArgs e)
{
}
Adım 13: Burada i değeri -1'den büyükse kontrolünü yaparak img2 için yapılan değişiklikleri eski haline geri getirmemiz gerekir. Projeyi kaydedip çalıştıralım.
private void img1_MouseUp(object sender, MouseEventArgs e)
{
if (i > -1)
{
dragging = false;
img2.AllowDrop = true;
img2.BorderStyle = BorderStyle.None;
i = -1;
}
}
Adım 14: Şimdi birinci resmin taşınması işlemini gerçekleştirelim. Bunun için MouseMove olayını kullanacağız. Bu olay resmin taşınması işleminin başlanacağını gösterecektir.
private void img1_MouseMove(object sender, MouseEventArgs e)
{
}
Adım 15: Burada taşıma işleminin farenin sol tuşuyla olup olmadığını kontrol edeceğiz. Ayrıca taşınacak resmin kopyasını panoya aktaracağız.
private void img1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
((PictureBox)sender).DoDragDrop(((PictureBox)sender).Image, DragDropEffects.Copy);
}
}
Adım 16: Ayrıca taşıma işlemi sonlandırıldığında ikinci resim konumuna ait özellikleri eski haline getirmemiz gerekir.
private void img1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && i>-1)
{
((PictureBox)sender).DoDragDrop(((PictureBox)sender).Image, DragDropEffects.Copy);
img2.BorderStyle = BorderStyle.None;
img2.AllowDrop = false;
}
}
Adım 17: Birinci resme ait taşıma işlemlerini gerçekleştirdik. Şimdi ikinci resimde oluşacak olayları yazalım. Öncelikle sürükleyip bırakma işleminin başladığını belirlemek için Enter olayını tanımlayalım.
private void img2_DragEnter(object sender, DragEventArgs e)
{
}
Adım 18: Bu adımda i değeri -1^den büyük ve panoda yer alan dosya resşm dosyasıysa kopyalama işlemini başlatalım. Aksi durumdaysa kopyalama işlemini durduralim.
private void img2_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Bitmap) && i > -1)
{
e.Effect = DragDropEffects.Copy;
dragging = true;
}
else
{
e.Effect = DragDropEffects.None;
dragging = false;
}
}
Adım 19: Resimlerin yerlerini değiştirmek ve sürükleyip bırakma işlemini gerçekleştirmek için DragDrop olayını tanımlayalım.
private void img2_DragDrop(object sender, DragEventArgs e)
{
}
Adım 20: Burada sürükleyip bırakma işlemini hatasız gerçekleştirmek için i ve dragging değişkenlerinin değerlerini kontrol edelim.
private void img2_DragDrop(object sender, DragEventArgs e)
{
if (i > -1 && dragging == true)
{
}
}
Adım 21: Üzerinde değişiklik yaılacak resmin bir kopyasını oluşturalım. Panodaki resmi buraya yapıştıralım. Sürükleyip bırakma işlemini gerçekleştiren resmi bu resimle değiştirelim. Değişkelerin değerlerini eski haline geri getirelim.
private void img2_DragDrop(object sender, DragEventArgs e)
{
if (i > -1 && dragging == true)
{
imgYedek = ((PictureBox)sender).Image;
Image getPicture = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
((PictureBox)sender).Image = getPicture;
img1.Image = imgYedek;
img2.AllowDrop = false;
img2.BorderStyle = BorderStyle.None;
i = -1;
imgYedek = null;
dragging = false;
}
}
Adım 22: Birinci resmi sürükleyip bırakarak ikinci resme aktarmış olduk. Şimdi bunun tam tersini yapalım. Öncelikle img2 nesnesine ait MouseDown olayını yazalım.