PictureBox ta 3 Adımda Drag Drop İşlemi
Temel olrak Drag&Drop işlemini basit bir örnek(form üzerindeki bir resmi belirlediğimiz panele sürükleyip bırakmak) üzerinden 3 adımda nasıl projelerimize adapte edebiliriz;
Adım 1:
PictureBox nesnesi bizim kaynağımız, Panel nesnesi ise hedefimiz.
Adım 2:
İlk önce PictureBox nesnemizi sürükleme(Drag) işlemine hazırlamalıyız. Bunun için;
* PictureBox nesnesinin Mouse Down ve Mouse Move olaylarını eklemeliyiz.
* Mouse Down olayında nesneye tıklandığı anki pozisyonunu saklamalıyız.
* Mouse Move olayında ise nesnenin tıklandığını(Mouse Down olayı) ve sürükleme işlemi için belirlenen aralık dahilinde işlemin gerçekleştirilip gerçekleştirilmediğini kontrol etmeliyiz.
* Eğer 3. adımda istediklerimiz gerçekleşmiş ise nesnenin DoDragDrop methodunu ClipBoard a kopyalanacak nesneyi ve efekt tipini belirterek çağırırız.
private Point mouseDownLocation = Point.Empty;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
mouseDownLocation = new Point(e.X,e.Y);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Size dragBoxSize = SystemInformation.DragSize;
if ((dragBoxSize.Width > Math.Abs(mouseDownLocation.X - e.X)) || (dragBoxSize.Height > mouseDownLocation.Y - e.Y))
{
pictureBox1.DoDragDrop(pictureBox1, DragDropEffects.Copy);
}
}
}
Adım 3:
Sıra sürükleme işleminin gerçekleşeceği Panel kontrolu için gerekli işlemlerin gerçekleştirilmesine geldi.
* İlk olarak nesnenin sürüklenen nesneleri kabul etmesi için AllowDrop özelliğini aktif hale getirmeliyiz.
* Sürüklenecek olan (örnekte PictureBox) nesnenin DoDragDrop methoduna parametre olarak verilen efektin Panel kontrolünün Drag Enter ve Drag Over olaylarında geçerli olduğunu belirtmeliyiz.
* ve artık nesnemizi sürükledikten sonra ClipBoard dan onu çağırıp Panel kontrolüne eklemeliyiz. Tabiki bu işlemi DragDrop olayı içinde gerçekleştireceğiz. Önemli bir nokta olarak, Panel kontrolüne sürükleyerek eklediğimiz PictureBox nesnesinin Location(pozisyonunu) belirtmez isek otomatik olarak Panel kontrolünün 0,0 noktasına yerleşecektir. Bunu engellemek içinde gene DragDrop olayı içinde sürükleme işleminin bittiği noktanın koordinatlarını tutmamız grekir ve tabiki bu noktayıda Panel in koordinat sistemine uyarlamalıyız.
private void panel1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void panel1_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void panel1_DragDrop(object sender, DragEventArgs e)
{
Int32 dropX = e.X;
Int32 dropY = e.Y;
Point dropLocation = new Point(dropX,dropY);
dropLocation = panel1.PointToClient(dropLocation);
PictureBox pb = e.Data.GetData(typeof(PictureBox)) as PictureBox;
panel1.Controls.Add(pb);
pb.Location=dropLocation;
}
tüm işlem bu.
NOT: Bu makale M. Genç adlı yazardan alıntı olarak alınmıştır