您好,我正在创建Windows窗体应用程序

我有一个名为Project的自定义类.cs具有以下特性:

  • 名称:字符串
  • 收入:int
  • UUID:字符串
using System;
using System.Collections.Generic;
using System.Text;

namespace Assignment2.Classes
{
    [Serializable]
    internal class Project
    {
        private string _projectName;
        private int _revenue;
        private string _uuid;

        public Project(string projectName, int revenue)
        {
            _projectName = projectName;
            _revenue = revenue;
            _uuid = General.GenerateUUID();
        }

        public string UUID
        {
            get { return _uuid; }
            set { _uuid = value; }
        }
        
        public string ProjectName
        {
            get { return _projectName; }
            set { _projectName = value; }
        }

        public int Revenue
        {
            get { return _revenue; }
            set { _revenue = value; }
        }

    }
}

这就是我当前将项目对象添加到listview的方式

我还创建了一个名为listViewProject的listView,它有3列:name、Revenue和UUID.是否可以使用项目类扩展listViewItem,以便每次创建新的项目对象时,都可以直接将其添加到listView控件,而无需创建listViewItem,就像使用自己的自定义类扩展TreeNode类一样.

编辑:这是我当前将项目对象添加到listView的方式

var item = new ListViewItem(new[] {project.UUID,project.ProjectName,project.Revenue.ToString()});

listViewProject.Items.Add(item);

注意:我在谷歌上搜索了一下,发现可以将项目对象添加为标记,但这不是我想要的.

推荐答案

要能够使用类似的内容将Project直接添加到ListView:

Project project = new Project
{
    ProjectName = "Big Project",
    Revenue = 12000000
};
listViewProject.Items.Add(project); 

你可以用implicit cast.那就行了.

internal class Project
{
    // Automatic, transparent conversion to ListViewItem
    public static implicit operator ListViewItem(Project project)
    {
        return new ListViewItem(new []
        {  
              project.UUID, 
              project.ProjectName, 
              project.Revenue.ToString()
        });
    }
    public string UUID { get; set; } = Guid.NewGuid().ToString();
    public string ProjectName { get; set; }
    public int Revenue { get; set; }
}

TEST

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        listViewProject.Columns.Add(nameof(Project.UUID), 400);
        listViewProject.Columns.Add(nameof(Project.ProjectName), 150);
        listViewProject.Columns.Add(nameof(Project.Revenue), 100);
    }
    private void buttonAddProjectItem_Click(object sender, EventArgs e)
    {
        Project project = new Project
        {
            ProjectName = $"Project {_tstCount++}",
            Revenue = Rando.Next(1000, 10000)
        };
        listViewProject.Items.Add(project);
    }

    char _tstCount = 'A';
    Random Rando = new Random();
}

enter image description here

Csharp相关问答推荐

子组件:如何根据另一个组件的状态启用输入

将修剪声明放入LINQ中

什么是通过反射创建类的泛型接口方法的正确方法?

在LINQ Where子句中使用新的DateTime

在具有主构造函数的类中初始化属性时出现警告

为什么在使用动态obj+类obj时会调用串联?

为具有实体框架后端的Reaction项目 Select 正确的Visual Studio模板

如何使用自定义负载均衡器管理Ocelot负载均衡器中的多线程和批读取

什么时候接受(等待)信号灯?尽可能的本地化?

是否由DI容器自动处理由ActivatorUilties.CreateInstance()创建的服务?

{ or ; expected error如何解决此问题

如何从Azure函数使用Graph API(SDK 5.35)中的[FindMeetingTimes]

Visual Studio,Docker容器-容器调用:连接被拒绝

如何读取TagHelper属性的文本值?

客户端/服务器RPC如何处理全局变量?

单位中快照的倾斜方向

与另一个对象位于同一位置的对象具有不同的变换位置

如何使用moq和xUnit对删除操作进行单元测试?

高性能融合生产者/消费者模式

如何为RichTextBox中的特定文本上色?