你看這樣想一下
先得到圖片的大小,后再得到ListView控件的width和長,然后得到mouse在顯示屏的位置,后就可以得到圖片移動的位置,之前看到一個用javascript寫的模仿星際的走動的功能和樓主的應該有類似的情況!

解决方案 »

  1.   

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;namespace ODLV
    {
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
    private System.Windows.Forms.ListView listView1;
    private System.Windows.Forms.Splitter splitter1;
    private System.Windows.Forms.ListView listView2;
    private System.Windows.Forms.ColumnHeader columnHeader1;
    private System.Windows.Forms.ColumnHeader columnHeader2;
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.Container components = null;
    bool lv1_mdown = false ;
    private System.Windows.Forms.ColumnHeader columnHeader3;
    private System.Windows.Forms.ColumnHeader columnHeader5;
    bool lv2_mdown = false; public Form1()
    {
    //
    // Required for Windows Form Designer support
    //
    InitializeComponent(); //
    // TODO: Add any constructor code after InitializeComponent call
    //
    } /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null) 
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    } #region Windows Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
    this.listView1 = new System.Windows.Forms.ListView();
    this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
    this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
    this.splitter1 = new System.Windows.Forms.Splitter();
    this.listView2 = new System.Windows.Forms.ListView();
    this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
    this.columnHeader5 = new System.Windows.Forms.ColumnHeader();
    this.SuspendLayout();
    // 
    // listView1
    // 
    this.listView1.AllowDrop = true;
    this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
    this.columnHeader1,
    this.columnHeader3});
    this.listView1.Dock = System.Windows.Forms.DockStyle.Top;
    this.listView1.FullRowSelect = true;
    this.listView1.MultiSelect = false;
    this.listView1.Name = "listView1";
    this.listView1.Size = new System.Drawing.Size(232, 176);
    this.listView1.TabIndex = 0;
    this.listView1.View = System.Windows.Forms.View.Details;
    this.listView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDown);
    this.listView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listView1_DragDrop);
    this.listView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listView1_DragEnter);
    this.listView1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseMove);
    // 
    // columnHeader1
    // 
    this.columnHeader1.Text = "COL1";
    this.columnHeader1.Width = 100;
    // 
    // columnHeader3
    // 
    this.columnHeader3.Text = "COL2";
    this.columnHeader3.Width = 100;
    // 
    // splitter1
      

  2.   

    // 
    this.splitter1.Dock = System.Windows.Forms.DockStyle.Top;
    this.splitter1.Location = new System.Drawing.Point(0, 176);
    this.splitter1.Name = "splitter1";
    this.splitter1.Size = new System.Drawing.Size(232, 3);
    this.splitter1.TabIndex = 1;
    this.splitter1.TabStop = false;
    // 
    // listView2
    // 
    this.listView2.AllowDrop = true;
    this.listView2.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
    this.columnHeader2,
    this.columnHeader5});
    this.listView2.Cursor = System.Windows.Forms.Cursors.Arrow;
    this.listView2.Dock = System.Windows.Forms.DockStyle.Fill;
    this.listView2.FullRowSelect = true;
    this.listView2.Location = new System.Drawing.Point(0, 179);
    this.listView2.MultiSelect = false;
    this.listView2.Name = "listView2";
    this.listView2.Size = new System.Drawing.Size(232, 226);
    this.listView2.TabIndex = 2;
    this.listView2.View = System.Windows.Forms.View.Details;
    this.listView2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listView2_MouseDown);
    this.listView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.listView2_DragDrop);
    this.listView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.listView2_DragEnter);
    this.listView2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.listView2_MouseMove);
    // 
    // columnHeader2
    // 
    this.columnHeader2.Text = "COL1";
    this.columnHeader2.Width = 100;
    // 
    // columnHeader5
    // 
    this.columnHeader5.Text = "COL2";
    this.columnHeader5.Width = 100;
    // 
    // Form1
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.ClientSize = new System.Drawing.Size(232, 405);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
      this.listView2,
      this.splitter1,
      this.listView1});
    this.Name = "Form1";
    this.Text = "Form1";
    this.Load += new System.EventHandler(this.Form1_Load);
    this.ResumeLayout(false); }
    #endregion /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main() 
    {
    Application.Run(new Form1());
    } private void Form1_Load(object sender, System.EventArgs e)
    {
    ImageList il = new ImageList();
    il.Images.Add(new System.Drawing.Icon("E:\\林APP\\WinFormCollection\\DragDropListView\\TICK.ico"));//D:\\smk\\odlv\\tick.ico
    listView1.SmallImageList = il ; ImageList i2 = new ImageList();
    i2.Images.Add(new System.Drawing.Icon("E:\\林APP\\WinFormCollection\\DragDropListView\\KEY04.ICO"));//D:\\smk\\odlv\\key04.ico
    listView2.SmallImageList = i2 ;
    string[] items = new string[2];
    items[0] = "LA" ; items[1] = "Los Angeles";
    listView1.Items.Add(new ListViewItem(items,0));
    items[0] = "WA" ; items[1] = "Seattle";
    listView1.Items.Add(new ListViewItem(items,0));
    items[0] = "IL" ; items[1] = "Chicago";
    listView1.Items.Add(new ListViewItem(items,0)); items[0] = "FR" ; items[1] = "Paris";
    listView2.Items.Add(new ListViewItem(items,0));
    items[0] = "BR" ; items[1] = "London";
    listView2.Items.Add(new ListViewItem(items,0));
    items[0] = "IN" ; items[1] = "Mumbai";
    listView2.Items.Add(new ListViewItem(items,0)); } private void listView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    string textBox1 = e.Data.GetData(DataFormats.Text).ToString();
    string[] items = textBox1.Split(',');
    listView1.Items.Add(new ListViewItem(items,0));
    lv1_mdown = false ;
    lv2_mdown = false ;
    }
      

  3.   

    private void listView2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    string textBox1 = e.Data.GetData(DataFormats.Text).ToString();
    string[] items = textBox1.Split(',');
    listView2.Items.Add(new ListViewItem(items,0));
    lv2_mdown = false ;
    lv1_mdown = false ;
    } private void listView2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
    if (e.Data.GetDataPresent(DataFormats.Text)) 
    e.Effect = DragDropEffects.Copy;
    else
    e.Effect = DragDropEffects.None;
    } private void listView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
    if (e.Data.GetDataPresent(DataFormats.Text)) 
    e.Effect = DragDropEffects.Copy;
    else
    e.Effect = DragDropEffects.None;
    } private void listView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if ( ! lv1_mdown ) return ;
    if ( e.Button == MouseButtons.Right ) return ; string str = GetItemText(listView1) ;
    if ( str == "" ) return ;

    listView1.DoDragDrop(str , DragDropEffects.Copy | DragDropEffects.Move ) ;
    } private void listView2_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if ( ! lv2_mdown ) return ;
    if ( e.Button == MouseButtons.Right ) return ; string str = GetItemText(listView2) ;
    if ( str == "" ) return ; listView2.DoDragDrop(str, DragDropEffects.Copy | DragDropEffects.Move ) ;
    } private void listView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    lv1_mdown = true ;
    } private void listView2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    lv2_mdown = true ;
    } public string GetItemText(ListView LVIEW)
    {
    int nTotalSelected = LVIEW.SelectedIndices.Count;
    if ( nTotalSelected <= 0 ) return "";
    IEnumerator selCol = LVIEW.SelectedItems.GetEnumerator();
    selCol.MoveNext() ;
    ListViewItem lvi = (ListViewItem)selCol.Current;
    string mDir = "";
    for ( int i=0; i < lvi.SubItems.Count;i++)
    mDir += lvi.SubItems[i].Text +",";

    mDir = mDir.Substring(0,mDir.Length-1);
    return mDir ;
    }
    }
    }
      

  4.   

    ListView之间/TreeView之间/ListView与TreeView之间都是可以拖放的没有仔细看 linaren(我的女朋友很漂亮) 的代码但是一定要注意在拖放事件和接收拖放事件的事件函数中,传递的对象一定要是一个object,而不是一个String或者Bitmap