c# - ListView.SelectedIndices.Count 多选时为零

标签 c# .net winforms user-interface

我一直在为这个 C#/.NET 问题而烦恼,当选择多个项目时,虚拟模式下的 ListView 将不会返回所选索引的列表。当选择一个或零个项目时,一切都会按预期进行。 我创建了下面的(最小的?)代码来说明我的问题。 我确信我忽略了一些非常明显的东西,但我来自 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 事件进行多项选择。

关于c# - ListView.SelectedIndices.Count 多选时为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48632437/

相关文章:

.net - 为 Windows Mobile Phone 进行开发,无需签订契约(Contract)

c# - 表格 : Enabled/Disable all controls in a container (panel)

c# - 在用户界面和控制台应用程序中使用 Task.Yield() 之间的区别

c# - 从 Razor 类库内部访问 Microsoft.AspNetCore.Components.Server.Circuits

.net - WPF 文本框太大

c# - ASP.NET Core API 版本控制 - 部分取代以前的方法版本

c# - 无法将类型 'string' 隐式转换为 'Microsoft.Azure.Management.DataFactory.Models.SecretBase'

c# - 在设计器 View 中呈现派生的用户控件

c# - Windows IoT Raspberry Pi 3 c# 创建 .txt 文件

c# - 字符转字符串错误