31 Temmuz 2016 Pazar

Drag Drop

DoDragDrop metodu
Kopyalama için kullanılır. Elimizde bir DataGridView olsun. Seçili hücrenin metni şöyle kopyalanır. Önce kaynak nesnenin DragDrop metodu tetiklenir.
void dgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
  dgv.DoDragDrop(dgv.SelectedRows[0].Cells[0].Value, DragDropEffects.Copy);
}
Şöyle yaparız.
protected override void OnMouseLeave(EventArgs e)
{
  DoDragDrop("Test Data", DragDropEffects.All);

  base.OnMouseLeave(e);
}
Drag Drop Event'leri
DragEnter
Handler metodunun iskeleti şöyledir.
protected override void OnDragEnter(DragEventArgs e)
{
  base.OnDragEnter(e);
  ...
}
Süreklenen nesneyi kabul edip etmeyeceğimiz belirtmek için şöyle yaparız.
protected void OnDragEnter(object sender, DragEventArgs e)
{
  if (e.Data.GetDataPresent(DataFormats.FileDrop))
  {
    e.Effect = DragDropEffects.All;
  }
}
DragDrop 
Handler metodunun iskeleti şöyledir.
protected override void OnDrop(DragEventArgs e)
{
  base.OnDrop(e);
  ...
}
Sürüklenip bırakılan nesneyi kabul edip etmeyeceğimiz belirtmek için şöyle yaparız.
protected void OnDrop(object sender, DragEventArgs e)
{
  if(e.Data.GetDataPresent(DataFormats.FileDrop))
  {
    string[] values = (string[])e.Data.GetData(DataFormats.FileDrop);
    foreach (var v in values)
    {
      var info = new FileInfo(v);
      if(info.Extension.ToLower() == ".exe")
      {
        ...
      }
    }
  }
}
Diğer metodları şöyle kodlayabiliriz.
protected override void OnDragOver(DragEventArgs e)
{
  base.OnDragOver(e);
  ...
}


protected override void OnDragLeave(DragEventArgs e)
{
  base.OnDragLeave(e);
  ...
}
DragEventsArgs Sınıfı
Data Alanı
IDataObject tipindedir. Şöyle yaparız.
e.Data
Effect Alanı
Şöyle yaparız.
protected override void OnDragOver(DragEventArgs e)
{
  if (e.Data.GetDataPresent(typeof(string)))
    e.Effect = DragDropEffects.Move;
  else
    e.Effect = DragDropEffects.None;

    base.OnDragOver(e);
}
IDataObject Arayüzü
GetData metodu
Genellikle bırakma yani OnDragDrop içinde kullanılır. Text olarak elde etmek için şöyle yaparız.
DragEventArgs e = ...;
e.Data.GetData(DataFormats.Text.ToString();
Şöyle de yapabiliriz.
string data = (string)e.Data.GetData(typeof(string));
GetDataPresent metodu
Şöyle yaparız.
void listBox_map_DragDrop(object sender, DragEventArgs e)
{
  if (e.Data.GetDataPresent(DataFormats.StringFormat))
  {..}
}
Şöyle de yapabiliriz.
if (!e.Data.GetDataPresent(typeof(string))) {...};

Hiç yorum yok:

Yorum Gönder