用C#实现在ListBox中拖动排序

 

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication2
... {
    
public class Form1 : System.Windows.Forms.Form
    
...{
        
private System.Windows.Forms.ListBox listBox1;
        
int indexofsource;//拖动的起始索引
        int indexoftarget; //拖动的结束索引
        private System.ComponentModel.Container components = null;
        
public Form1()
        
...{
             InitializeComponent();
         }


        
protected override void Dispose(bool disposing)
        
...{
            
if (disposing)
            
...{
                
if (components != null)
                
...{
                     components.Dispose();
                 }

             }

            
base.Dispose(disposing);
         }


        
Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码

        
private void InitializeComponent()
        
...{
            
this.listBox1 = new System.Windows.Forms.ListBox();
            
this.SuspendLayout();
            
//
            
// listBox1
            
//
            this.listBox1.AllowDrop = true;//这个属性一定要设置为true;
            this.listBox1.ItemHeight = 12;
            
this.listBox1.Items.AddRange(new object[] ...{
                
"1",
                
"2",
                
"3",
                
"4",
                
"5",
                
"6",
                
"7",
                
"8",
                
"9",
                
"0"});
            
this.listBox1.Location = new System.Drawing.Point(16, 8);
            
this.listBox1.Name = "listBox1";
            
this.listBox1.ScrollAlwaysVisible = true;
            
this.listBox1.Size = new System.Drawing.Size(264, 136);
            
this.listBox1.TabIndex = 0;
            
this.listBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDown);
            
this.listBox1.DragOver += new System.Windows.Forms.DragEventHandler(this.listBox1_DragOver);
            
this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
            
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            
this.ClientSize = new System.Drawing.Size(292, 273);
            
this.Controls.Add(this.listBox1);
            
this.Name = "Form1";
            
this.Text = "Form1";
            
this.ResumeLayout(false);
         }


        
#endregion

 

 

 

 

 

 

 

[STAThread]
         static void Main()
        
... {
             Application.Run(
new Form1());
         }


        
private void listBox1_MouseDown( object sender, System.Windows.Forms.MouseEventArgs e)
        
... {
             indexofsource
= ((ListBox)sender).IndexFromPoint(e.X, e.Y);
            
if (indexofsource != ListBox.NoMatches)
            
...{
                 ((ListBox)sender).DoDragDrop(((ListBox)sender).Items[indexofsource].ToString(), DragDropEffects.All);
             }

         }


        
private void listBox1_DragOver( object sender, System.Windows.Forms.DragEventArgs e)
        
... { //拖动源和放置的目的地一定是一个ListBox
            if (e.Data.GetDataPresent(typeof(System.String)) && ((ListBox)sender).Equals(listBox1))
            
...{
                 e.Effect
= DragDropEffects.Move;
             }

            
else
                 e.Effect
= DragDropEffects.None;
         }


        
private void listBox1_DragDrop( object sender, System.Windows.Forms.DragEventArgs e)
        
... {
             ListBox listbox
= (ListBox)sender;
             indexoftarget
= listbox.IndexFromPoint(listbox.PointToClient(new Point(e.X, e.Y)));
            
if (indexoftarget != ListBox.NoMatches)
            
...{
                
string temp = listbox.Items[indexoftarget].ToString();
                 listbox.Items[indexoftarget]
= listbox.Items[indexofsource];
                 listbox.Items[indexofsource]
= temp;
                 listbox.SelectedIndex
= indexoftarget;
             }

         }

     }


}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值