Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net WinForms。如何以编程方式控制ListView的选择矩形?_C#_.net_Winforms_Listview - Fatal编程技术网

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

C# .Net WinForms。如何以编程方式控制ListView的选择矩形?,c#,.net,winforms,listview,C#,.net,Winforms,Listview,我在用ListView做一个实验,遇到了一个选择矩形的问题。我创建了一个windows窗体应用程序,将两个ListView控件(listView1、listView2)放到Form1上 我在设计时设置控件的属性,如下所示: 列表视图1:添加了3个项目(“项目1”、“项目2”、“项目3”) listView2:AllowDrop=true 我编写了将项目从listView1拖放到listView2的代码,如下所示 using System; using System.Windows.Forms;

我在用ListView做一个实验,遇到了一个选择矩形的问题。我创建了一个windows窗体应用程序,将两个ListView控件(listView1、listView2)放到Form1上

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

列表视图1:添加了3个项目(“项目1”、“项目2”、“项目3”)

listView2:AllowDrop=true

我编写了将项目从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

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

释放鼠标左键后,我没有按任何其他键,也就是说,所有按钮都处于向上状态,但listView1很高兴地对鼠标移动事件和更改选择做出反应

我找不到禁用选择矩形的方法。我知道它的系统在做这一切。在我看来,对于.Net开发人员来说,似乎已经没有办法对此做任何事情了。所以我决定问:

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

而不是
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);
        }
    }
}

你好可能您应该禁用MultiSelect属性?之所以如此,是因为您已经从第一个ListView中释放了MouseUp,并且它仍然“认为”MouseUp没有被禁用,而Capture属性仍然处于启用状态。发生这种情况是因为您使用了错误的事件,请改用ListView.ItemDrag。亲爱的@Idle\u Mind。您的解决方案满足了我的业务逻辑中的所有要求。在ListView控件中,mousemove事件似乎是启动拖动的地方。我将投票赞成你的答案。但我想知道是否有一种方法可以控制.NET上ListView的选择矩形。Net开发人员如何以编程方式控制ListView的选择矩形?