Я пытаюсь сделать класс ListViewExtensions, но получаю некоторые ошибки

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MinimizeCapture
{
    public partial class ListViewCostumControl : UserControl
    {
        public static ListViewControl lvnf;

        public ListViewCostumControl()
        {
            InitializeComponent();

            lvnf = new ListViewControl();
            lvnf.Location = new Point(50, 50);
            lvnf.Size = new Size(50, 50);
            lvnf.View = View.SmallIcon;
            lvnf.Dock = DockStyle.Fill;
            lvnf.SuspendLayout();
            lvnf.LabelEdit = true;
            lvnf.Sorting = SortOrder.None;
            this.Controls.Add(lvnf);
            lvnf.ResumeLayout(false);
        }

        public class ListViewControl : System.Windows.Forms.ListView
        {
            public ListViewControl()
            {
                this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
                this.SetStyle(ControlStyles.EnableNotifyMessage, true);
            }

            protected override void OnNotifyMessage(System.Windows.Forms.Message m)
            {
                if (m.Msg != 0x14)
                {
                    base.OnNotifyMessage(m);
                }
            }
        }

        public static class ListViewExtensions
        {
            public static ListViewItemCollection AddRange(this ListViewItemCollection source, WindowSnapCollection windows)
            {
                //Create a ListViewItem for each object and set the 
                //various properties appropriately
                source.AddRange(from w in windows
                                select new ListViewItem(w.ToString())
                                {
                                    Tag = w
                                });

                return source;
            }

            public static WindowSnap GetWindowSnap(this ListViewItem source)
            {
                return source.Tag as WindowSnap;
            }

            public static WindowSnap GetSelectedWindowSnap(this ListView source)
   {
       return source.SelectedItem?.GetWindowSnap();
   }

            //Add more methods as needed
        }

        private void ListViewNFTest_Load(object sender, EventArgs e)
        {

        }
    }
}

Ошибки на линиях

public static ListViewItemCollection AddRange(this ListViewItemCollection source, WindowSnapCollection windows)

Ошибка 16 не удалось найти тип или имя пространства имен «ListViewItemCollection» (отсутствует директива using или ссылка на сборку?

return source.SelectedItem?.GetWindowSnap();

Ошибка 18 ‘ Системы.Windows.Формы.ListView ‘не содержит определения для’ SelectedItem ‘и никакого метода расширения’ SelectedItem’, принимающего первый аргумент типа ‘ System.Windows.Формы.ListView » можно найти (отсутствует директива using или ссылка на сборку?

Ошибка 19 нет перегрузки для метода ‘GetWindowSnap’ принимает 0 аргументов

1 ответ

  1. Похоже, вам нужно полностью квалифицировать некоторые имена классов.

    Класс ListViewItemCollection определен в ListView. Таким образом, вы должны полностью квалифицировать его с ListView.ListViewItemCollection.

    public static ListView.ListViewItemCollection AddRange(
        this ListView.ListViewItemCollection source, 
        WindowSnapCollection windows)
    

    WindowSnap и коллекция WindowSnap не являются частью .NET, и вы не предоставляете определение, поэтому неясно, как их использовать. Выясните, где они определены, и используйте полное имя класса, включая пространство имен. Замените все вхождения WindowSnapNamespace.WindowSnap, и то же самое относится к WindowSnapCollection.

    Дополнительные сведения см. В статье MSDN о полных именах.