Makale numarası: 822483 - Son Gözden Geçirme: 26 Kasım 2007 Pazartesi - Gözden geçirme: 2.9

ListView denetimi, çalıştırma sırasında maddeler için sürükle ve bırak işlevselliği desteklemiyor

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Belirtiler

Öğeleri bir <a0>Microsoft Windows</a0> formundaki ListView denetimi eklerseniz, öğelerin ListView denetimde zamanında sürükleyerek öğeleri yeniden kuramıyor.

Neden

Bu sorun, ListView denetimi, çalıştırma sırasında maddeler için sürükle ve bırak işlevlerini desteklememesi nedeniyle oluşur.

Pratik Çözüm

Bu soruna geçici bir çözüm bulmak için <a0></a0>, Sürükle ve bırak işlevlerini ListView denetlemek için aşağıdaki gibi girin:
  1. Aşağıdaki kodu ListView1_ItemDrag olay işleyicisine ekleyin.

    Microsoft Visual Basic .NET'i veya Microsoft Visual Basic 2005 kodu
     'Begins a drag-and-drop operation in the ListView control.
    ListView1.DoDragDrop(ListView1.SelectedItems, DragDropEffects.Move)
    Microsoft Visual C# .NET veya Microsoft Visual C# 2005 kod
    //Begins a drag-and-drop operation in the ListView control.
    listView1.DoDragDrop(listView1.SelectedItems, DragDropEffects.Move);
  2. Aşağıdaki kodu ListView1_DragEnter olay işleyicisine ekleyin.

    Visual Basic .NET veya Visual Basic 2005 kodu
    Dim i As Integer
    For i = 0 To e.Data.GetFormats().Length - 1
    If e.Data.GetFormats()(i).Equals("System.Windows.Forms.ListView+SelectedListViewItemCollection") Then
        'The data from the drag source is moved to the target.
        e.Effect = DragDropEffects.Move
    End If
    Next
    Visual C# .NET veya Visual C# 2005 kod
    int len=e.Data.GetFormats().Length-1 ;
    int i;
    for (i = 0 ; i<=len ;i++)
    {
        if (e.Data.GetFormats()[i].Equals("System.Windows.Forms.ListView+SelectedListViewItemCollection"))
        {
            //The data from the drag source is moved to the target.	
            e.Effect = DragDropEffects.Move;
        }
    }
    
  3. Aşağıdaki kodu ListView1_DragDrop olay işleyicisine ekleyin.

    Visual Basic .NET veya Visual Basic 2005 kodu
    'Return if the items are not selected in the ListView control.
    If ListView1.SelectedItems.Count = 0 Then Return
    'Returns the location of the mouse pointer in the ListView control.
    Dim p As Point = ListView1.PointToClient(New Point(e.X, e.Y))
    'Obtain the item that is located at the specified location of the mouse pointer.
    Dim dragToItem As ListViewItem = ListView1.GetItemAt(p.X, p.Y)
    If dragToItem Is Nothing Then Return
    'Obtain the index of the item at the mouse pointer.
    Dim dragIndex As Integer = dragToItem.Index
    Dim i As Integer
    Dim sel(ListView1.SelectedItems.Count) As ListViewItem
    For i = 0 To ListView1.SelectedItems.Count - 1
        sel(i) = ListView1.SelectedItems.Item(i)
    Next
    For i = 0 To ListView1.SelectedItems.Count - 1
        'Obtain the ListViewItem to be dragged to the target location.
        Dim dragItem As ListViewItem = sel(i)
        Dim itemIndex As Integer = dragIndex
        If itemIndex = dragItem.Index Then Return
        If dragItem.Index < itemIndex Then
           itemIndex = itemIndex + 1
        Else
           itemIndex = dragIndex + i
        End If
        'Insert the item in the specified location.
        Dim insertitem As ListViewItem = dragItem.Clone
        ListView1.Items.Insert(itemIndex, insertitem)
        'Removes the item from the initial location while 
        'the item is moved to the new location.
        ListView1.Items.Remove(dragItem)
    Next
    
    Visual C# .NET veya Visual C# 2005 kod
    //Return if the items are not selected in the ListView control.
    if(listView1.SelectedItems.Count==0)
    {
       return;
    }
    //Returns the location of the mouse pointer in the ListView control.
    Point cp = listView1.PointToClient(new Point(e.X, e.Y));
    //Obtain the item that is located at the specified location of the mouse pointer.
    ListViewItem dragToItem = listView1.GetItemAt(cp.X, cp.Y);
    if(dragToItem==null)
    {
        return;
    } 
    //Obtain the index of the item at the mouse pointer.
    int dragIndex = dragToItem.Index;
    ListViewItem[] sel=new ListViewItem [listView1.SelectedItems.Count];
    for(int i=0; i<=listView1.SelectedItems.Count-1;i++)
    {
         sel[i]=listView1.SelectedItems[i];
    }
    for(int i=0; i<sel.GetLength(0);i++)
    { 
        //Obtain the ListViewItem to be dragged to the target location.
        ListViewItem dragItem = sel[i];
        int itemIndex = dragIndex;
        if(itemIndex==dragItem.Index)
       {
            return;
       }
       if(dragItem.Index<itemIndex)
           itemIndex++;
      else
           itemIndex=dragIndex+i;
       //Insert the item at the mouse pointer.
       ListViewItem insertItem = (ListViewItem)dragItem.Clone();
       listView1.Items.Insert(itemIndex, insertItem);
       //Removes the item from the initial location while 
       //the item is moved to the new location.
       listView1.Items.Remove(dragItem);
    }
    
  4. Yapı) menüsünde tıklatın Build Solution.
  5. Hata Ayıkla) menüsünde, Başlat ' ı tıklatın.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

  1. Microsoft Visual Studio 2005 ya da Microsoft Visual Studio. NET'i başlatın.
  2. Visual Basic .NET, Visual Basic 2005, Visual C# 2005 ve Visual C# .NET kullanarak yeni bir Windows uygulaması oluşturun.

    Varsayılan olarak, Form1 oluşturulur.
  3. ListView denetimi Form1'e ekleyin.
  4. ListView1 ' ı sağ tıklatın ve sonra da Properties ' i tıklatın.
  5. Özellikler iletişim kutusunu öğelerini tıklatın ve sonra da üç nokta düğmesini (...) tıklatın.
  6. Listviewıtem koleksiyonu Düzenleyicisi) iletişim kutusunda, dört kez Ekle ' yi tıklatın.
  7. Ikinci Listviewıtem denetimin metin özelliği Item2 için üçüncü Listviewıtem denetimin Text özelliği için Item3 ayarlayın ve sonra dördüncü Listviewıtem denetimin metin özelliği Item4 için Öğe1, ilk Listviewıtem denetimi Text özelliğini ayarlayın.
  8. Listviewıtem koleksiyonu Düzenleyicisi) iletişim kutusunda, Tamam ' ı tıklatın.
  9. ListView1özellikleri iletişim kutusunda, listegörünümü özelliğini ayarlayın.
  10. ListView1AllowDrop'u özelli?inin true olarak ayarlayın.
  11. Yapı) menüsünde tıklatın Build Solution.
  12. Hata Ayıkla) menüsünde, Başlat ' ı tıklatın.
  13. Öğe1ListView denetimindeki bir konuma sürüklemek, bu seçeneği deneyin.

    Öğe1 sürükleyemezsiniz.

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Web sitelerini ziyaret edin:
Control.DoDragDrop yöntemi
http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop(vs.71).aspx)
Control.DragDrop olayı
http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.dragdrop(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.dragdrop(vs.71).aspx)
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
822482  (http://support.microsoft.com/kb/822482/ ) NASıL YAPıLıR: Microsoft Visual Basic .NET kullanarak Microsoft Windows uygulamalarında Sürükle ve bırak işlevselliği sağlar.


Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbvs2005swept kbvs2005applies kbforms kbwindowsforms kblistview kbdragdrop kbctrl kbcontrol kbprb KB822483 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:822483  (http://support.microsoft.com/kb/822483/en-us/ )