İngilizce dilinde oku

Aracılığıyla paylaş


DragEventArgs Sınıf

Tanım

DragDrop, DragEnterveya DragOver olayı için veri sağlar.

C#
[System.Runtime.InteropServices.ComVisible(true)]
public class DragEventArgs : EventArgs
C#
public class DragEventArgs : EventArgs
Devralma
DragEventArgs
Türetilmiş
Öznitelikler

Örnekler

Aşağıdaki örnekte, iki ListBox denetimi arasındaki sürükle ve bırak işlemi gösterilmektedir. Örnek, sürükleme eylemi başladığında DoDragDrop yöntemini çağırır. Sürükleme eylemi, MouseDown olayı sırasında farenin fare konumundan SystemInformation.DragSize fazla hareket ettiyse başlar. IndexFromPoint yöntemi, MouseDown olayı sırasında sürüklenecek öğenin dizinini belirlemek için kullanılır.

Örnekte, sürükle ve bırak işlemi için özel imleçlerin kullanılması da gösterilmektedir. Örnek, özel sürükleme ve bırakmama imleçleri için uygulama dizininde sırasıyla 3dwarro.cur ve 3dwno.curiki imleç dosyasının bulunduğunu varsayar. UseCustomCursorsCheck CheckBox işaretliyse özel imleçler kullanılır. Özel imleçler GiveFeedback olay işleyicisinde ayarlanır.

Klavye durumu, shift, CTRL, ALT veya CTRL+ALT tuşlarının durumuna bağlı olarak sürükleme işleminin ne olacağını belirlemek üzere doğru ListBoxiçin DragOver olay işleyicisinde değerlendirilir. ListBox bırakmanın gerçekleşeceği konum da DragOver olayı sırasında belirlenir. Bırakacak veriler bir Stringdeğilse, DragEventArgs.EffectDragDropEffects.Noneolarak ayarlanır. Son olarak, bırakmanın durumu DropLocationLabelLabelgörüntülenir.

Doğru ListBox bırakacak veriler DragDrop olay işleyicisinde belirlenir ve String değeri ListBoxuygun yere eklenir. Sürükleme işlemi formun sınırlarının dışına taşınırsa, QueryContinueDrag olay işleyicisinde sürükle ve bırak işlemi iptal edilir.

Bu kod alıntısı, DragEventArgs sınıfını kullanmayı gösterir. Kod örneğinin tamamı için DoDragDrop yöntemine bakın.

C#
private void ListDragTarget_DragOver(object sender, DragEventArgs e)
{
    // Determine whether string data exists in the drop data. If not, then
    // the drop effect reflects that the drop cannot occur.
    if (!e.Data.GetDataPresent(typeof(System.String)))
    {
        e.Effect = DragDropEffects.None;
        DropLocationLabel.Text = "None - no string data.";
        return;
    }

    // Set the effect based upon the KeyState.
    if ((e.KeyState & (8 + 32)) == (8 + 32) &&
        (e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link)
    {
        // KeyState 8 + 32 = CTRL + ALT

        // Link drag-and-drop effect.
        e.Effect = DragDropEffects.Link;
    }
    else if ((e.KeyState & 32) == 32 &&
        (e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link)
    {
        // ALT KeyState for link.
        e.Effect = DragDropEffects.Link;
    }
    else if ((e.KeyState & 4) == 4 &&
        (e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
    {
        // SHIFT KeyState for move.
        e.Effect = DragDropEffects.Move;
    }
    else if ((e.KeyState & 8) == 8 &&
        (e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy)
    {
        // CTRL KeyState for copy.
        e.Effect = DragDropEffects.Copy;
    }
    else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
    {
        // By default, the drop action should be move, if allowed.
        e.Effect = DragDropEffects.Move;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }

    // Get the index of the item the mouse is below. 

    // The mouse locations are relative to the screen, so they must be 
    // converted to client coordinates.

    indexOfItemUnderMouseToDrop =
        ListDragTarget.IndexFromPoint(ListDragTarget.PointToClient(new Point(e.X, e.Y)));

    // Updates the label text.
    if (indexOfItemUnderMouseToDrop != ListBox.NoMatches)
    {
        DropLocationLabel.Text = "Drops before item #" + (indexOfItemUnderMouseToDrop + 1);
    }
    else
    {
        DropLocationLabel.Text = "Drops at the end.";
    }
}

Aşağıdaki örnekte, sürükle ve bırak işleminin kaynağı ve hedefi arasında DragEventArgs nasıl geçirildiğini gösterilmektedir. Bu örnekte ListBox denetimi verilerin kaynağı, RichTextBox denetimi ise hedeftir. Örnekte, ListBox denetiminin geçerli dosya adlarının listesiyle doldurulduğunu varsayar. Kullanıcı görüntülenen dosya adlarından birini ListBox denetiminden RichTextBox denetimine sürüklediğinde, dosya adında başvuruda bulunılan dosya açılır.

İşlem, ListBox denetiminin MouseDown olayında başlatılır. DragEnter olay işleyicisinde örnek, verilerin RichTextBox denetiminin görüntüleyebileceği bir biçimde olduğunu doğrulamak için GetDataPresent yöntemini kullanır ve ardından verilerin kaynak denetimden hedef denetime kopyalanması gerektiğini belirtmek için DragDropEffects özelliğini ayarlar. Son olarak, RichTextBox denetiminin DragDrop olay işleyicisi açmak üzere dosya adını almak için GetData yöntemini kullanır.

C#
private void Form1_Load(object sender, EventArgs e) 
{
   // Sets the AllowDrop property so that data can be dragged onto the control.
   richTextBox1.AllowDrop = true;

   // Add code here to populate the ListBox1 with paths to text files.
}

private void listBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
   // Determines which item was selected.
   ListBox lb =( (ListBox)sender);
   Point pt = new Point(e.X,e.Y);
   int index = lb.IndexFromPoint(pt);

   // Starts a drag-and-drop operation with that item.
   if(index>=0) 
   {
      lb.DoDragDrop(lb.Items[index].ToString(), DragDropEffects.Link);
   }
}

private void richTextBox1_DragEnter(object sender, DragEventArgs e) 
{
   // If the data is text, copy the data to the RichTextBox control.
   if(e.Data.GetDataPresent("Text"))
      e.Effect = DragDropEffects.Copy;
}

private void richTextBox1_DragDrop(object sender, DragEventArgs e) 
{
   // Loads the file into the control. 
   richTextBox1.LoadFile((String)e.Data.GetData("Text"), System.Windows.Forms.RichTextBoxStreamType.RichText);
}

Açıklamalar

DragDrop olayı, kullanıcı bir nesneyi denetimin üzerine sürükleyip fare düğmesini serbest bırakarak denetime bırakarak sürükleyip bırakma işlemini tamamladığında gerçekleşir. DragEnter olayı, kullanıcı fareyle bir nesneyi sürüklerken fare işaretçisini denetime taşırken gerçekleşir. DragOver olayı, kullanıcı fareyle bir nesneyi sürüklerken fare işaretçisini denetimin üzerine getirince gerçekleşir.

DragEventArgs nesnesi bu olayla ilişkili tüm verileri belirtir; SHIFT, CTRL ve ALT tuşlarının geçerli durumu; fare işaretçisinin konumu; ve sürükleme olayının kaynağı ve hedefi tarafından izin verilen sürükle ve bırak efektleri.

Olay modeli hakkında bilgi için bkz. İşleme ve Olayları Oluşturma.

Oluşturucular

Özellikler

AllowedEffect

Sürükleme olayının kaynağı (veya kaynağı) tarafından hangi sürükle ve bırak işlemlerine izin verilir alır.

Data

Bu olayla ilişkili verileri içeren IDataObject alır.

DropImageType

Bırakma açıklaması görüntü türünü alır veya ayarlar.

Effect

Sürükle ve bırak işleminde hedef bırakma efektini alır veya ayarlar.

KeyState

SHIFT, CTRL ve ALT tuşlarının geçerli durumunun yanı sıra fare düğmelerinin durumunu alır.

Message

"%1taşı" gibi bırakma açıklaması metnini alır veya ayarlar.

MessageReplacementToken

Messageiçinde %1 belirtildiğinde , "Belgeler" gibi bırakma açıklaması metnini alır veya ayarlar.

X

Fare işaretçisinin x koordinatını ekran koordinatlarında alır.

Y

Fare işaretçisinin y koordinatını ekran koordinatlarında alır.

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ürün Sürümler
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

Ayrıca bkz.