.Net WinForms。如何以编程方式控制ListView的选择矩形?

时间:2017-05-20 06:27:39

标签: c# .net winforms listview

我正在使用ListView进行实验,并且遇到了选择矩形的问题。我创建了一个Windows窗体应用程序,将2个ListView控件(listView1,listView2)放到Form1上。

我在设计时设置控件的属性如下:

listView1:添加了3个项目(" Item1"," Item2"," Item3")

listView2:AllowDrop = true。

enter image description here

我编写代码将listView1中的项目拖放到listView2,如下所示。

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void listView1_MouseDown(object sender, MouseEventArgs e)
        {
            ListView listView = ((ListView)sender);
            ListViewItem listViewItem = listView.GetItemAt(e.X, e.Y);
            if (listViewItem != null)
            {
                listView.DoDragDrop(listViewItem, DragDropEffects.Move);
            }
        }

        private void listView2_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        private void listView2_DragDrop(object sender, DragEventArgs e)
        {
            ListView listView = ((ListView)sender);
            ListViewItem listViewItem = ((ListViewItem)e.Data.GetData(typeof(ListViewItem)));
            listView1.Items.Remove(listViewItem);
            listView.Items.Add(listViewItem);
        }
    }
}

现在我正在运行应用程序并将listView1中的项拖放到listView2。

enter image description here

enter image description here

enter image description here

enter image description here

这里我发布鼠标左键。 listView1中的项目已成功导出到目标,但在listView1中,选择矩形正在绘制

enter image description here

释放鼠标左键后,我没有按任何其他键,即所有按钮都处于UP状态,但listView1很乐意对鼠标移动事件和更改选择作出反应。

enter image description here enter image description here

我无法找到禁用选择矩形的方法。我明白它的系统正在做这一切。在我看来,.Net开发人员无法做任何事情。所以我决定问:

.Net开发人员如何以编程方式控制ListView的选择矩形?

1 个答案:

答案 0 :(得分:1)

而不是MouseDown(),在MouseMove()中启动拖动,如下所示:

private void listView1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        ListView listView = ((ListView)sender);
        ListViewItem listViewItem = listView.GetItemAt(e.X, e.Y);
        if (listViewItem != null)
        {
            listView.DoDragDrop(listViewItem, DragDropEffects.Move);
        }
    }
}