【问题标题】:Listview in virtual mode - get list of selected items虚拟模式下的 Listview - 获取所选项目的列表
【发布时间】:2018-12-12 16:38:38
【问题描述】:

当为此 winform 启用虚拟模式时,有一种方法可以在列表视图中使用鼠标选择所有项目。

正在使用的工作代码示例,我现在只能检索一个选定的文件。在网上找不到太多示例,可以识别为重复但对我来说不是决定性的,或者答案很简单。

        private void FilesFoundList_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
    {
        try
        {


            if (e.ItemIndex >= 0 && e.ItemIndex < ListFilesInfos.Count)
            {
                try
                {
                    var acc = ListFilesInfos[e.ItemIndex];

                   //with colors
                    e.Item = new ListViewItem(new string[] { acc.TagItem, acc.FileName, acc.FilePath.ToString() })
                   { Tag = acc, 
                     BackColor = SearchLabColor(0, Path.GetExtension(acc.FileName.ToString()), acc.FilePath.ToString(), acc.FileName.ToString()),
                     ForeColor = SearchLabColor(1, Path.GetExtension(acc.FileName.ToString()), acc.FilePath.ToString(), acc.FileName.ToString()),
                     UseItemStyleForSubItems = false
                   }; // Set Tag object property to our actual AccountInfo object
                }
                catch { this.Refresh(); }
            }
        }
        catch
        {

        }

    }

    private void ShowItemsVirtual(List<SearchFilesInfo> infos)
    {
        try
        {
            FilesFoundList.VirtualListSize = infos.Count; // Set number of items in list view
        }
        catch { this.Refresh(); }
    }

    private void FilesFoundList_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
    {

        if (FilesFoundList.VirtualMode == true)
        {

            SelectedFiles.GlobalVar = (e.Item.SubItems[2]).Text.ToString() + (e.Item.SubItems[1]).Text.ToString();
        }
    }

【问题讨论】:

标签: c# listview


【解决方案1】:

您可以将代码缩写为:

List<multiSearchSelect> multiSearchSelect = new List<multiSearchSelect>();

private void FilesFoundList_VirtualItemsSelectionRangeChanged(object sender, ListViewVirtualItemsSelectionRangeChangedEventArgs e)
{
    if (FilesFoundList.VirtualMode == true)
    {
        multiSearchSelect=
            FilesFoundList.SelectedIndices
            .Select(i=> new multiSearchSelect()
            { 
                fileName = FilesFoundList.Items[i].SubItems[1].Text, 
                filePath = FilesFoundList.Items[item].SubItems[2].Text
            });
    }
}

class multiSearchSelect
{
    public string fileName { set; get; }
    public string filePath { set; get; }
}

【讨论】:

  • 谢谢帮助,很清晰。
【解决方案2】:

我将发布适合我的目的的解决方案。我添加了 ItemsSelectionRangeChanged 事件并获取所选文件的列表。

List<multiSearchSelect> multiSearchSelect = new List<multiSearchSelect>();

private void FilesFoundList_VirtualItemsSelectionRangeChanged(object sender, ListViewVirtualItemsSelectionRangeChangedEventArgs e)
        {
            if (FilesFoundList.VirtualMode == true)
            {
                multiSearchSelect.Clear();

                ListView.SelectedIndexCollection col = FilesFoundList.SelectedIndices;
                if (col.Count > 1)
                {
                    foreach (int item in col)
                    {
                        multiSearchSelect.Add(new multiSearchSelect
                        {
                            fileName = FilesFoundList.Items[item].SubItems[1].Text,
                            filePath = FilesFoundList.Items[item].SubItems[2].Text
                        });
                    }
                }
            }
        }

class multiSearchSelect
    {
        public string fileName { set; get; }
        public string filePath { set; get; }
    }

【讨论】:

    猜你喜欢
    • 2011-04-23
    • 2023-03-30
    • 2011-05-29
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多