Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# ListView.SelectedIndices.Count对于多重选择为零_C#_.net_Winforms_User Interface - Fatal编程技术网

C# ListView.SelectedIndices.Count对于多重选择为零

C# ListView.SelectedIndices.Count对于多重选择为零,c#,.net,winforms,user-interface,C#,.net,Winforms,User Interface,我一直在为这个C#/.NET问题发愁,在这个问题上,当选择了多个项目时,虚拟模式下的ListView将不会返回所选索引的列表。当选择一个或零个项目时,一切都按预期进行。 我已经创建了下面的(最小ish?)代码来说明我的问题。 我确信我忽略了一些非常明显的东西,但我来自C/C++背景,对.Net(尤其是GUI代码)几乎没有经验 using System; using System.Windows.Forms; namespace AnotherListViewTest { public

我一直在为这个C#/.NET问题发愁,在这个问题上,当选择了多个项目时,虚拟模式下的ListView将不会返回所选索引的列表。当选择一个或零个项目时,一切都按预期进行。 我已经创建了下面的(最小ish?)代码来说明我的问题。 我确信我忽略了一些非常明显的东西,但我来自C/C++背景,对.Net(尤其是GUI代码)几乎没有经验

using System;
using System.Windows.Forms;

namespace AnotherListViewTest
{
    public partial class Form1 : Form
    {
        private System.Windows.Forms.ListView listView;
        private System.Windows.Forms.ColumnHeader columnHeader1;

        public Form1()
        {
            //InitializeComponent();
            this.listView = new System.Windows.Forms.ListView();
            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.SuspendLayout();
            // 
            // listView
            // 
            this.listView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
            | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.columnHeader1});
            this.listView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
            this.listView.Location = new System.Drawing.Point(8, 8);
            this.listView.Name = "listView";
            this.listView.Size = new System.Drawing.Size(676, 451);
            this.listView.TabIndex = 6;
            this.listView.UseCompatibleStateImageBehavior = false;
            this.listView.View = System.Windows.Forms.View.Details;
            this.listView.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.listView_RetrieveVirtualItem);
            this.listView.SelectedIndexChanged += new System.EventHandler(this.listView_SelectedIndexChanged);
            // 
            // columnHeader1
            // 
            this.columnHeader1.Width = 600;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(696, 471);
            this.Controls.Add(this.listView);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            listView.VirtualMode = true;
            listView.VirtualListSize = 1000;
        }

        private void listView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
        {
            e.Item = new ListViewItem(new String[] { e.ItemIndex.ToString() });
        }

        private void listView_SelectedIndexChanged(object sender, EventArgs e)
        {
            System.Diagnostics.Debug.WriteLine("Number of selected items: " + listView.SelectedIndices.Count);
        }
    }
}

我需要使用VirtualItemsSelectionRangeChanged事件进行多项选择。

可能重复的VirtualMode是什么,并且在该模式下确实需要它吗?值得注意的奇怪之处:我发现只有在使用Shift进行多项选择时才需要此事件。不能使用Ctrl或鼠标拖动。此外,当使用Shift进行多重选择时,SelectedIndexChanged仍会使用SelectedDices.Count=0触发虚拟化项SelectionRangeChanged使用SelectedDices.Count触发预期值。