在对象或表单之间传递List <t>

时间:2015-07-01 08:33:48

标签: c# winforms objectlistview

如何传递对象类MyForm属性列表ClassN?(ClassN没有基类或接口)。作为类的对象MyForm将能够访问成员ClassN?

目的:在ListView(或ObjectListView或其他)上显示来自不同来源的表单信息,自动确定列数(具有属性的公共属性(在下面的示例中,未指定))。当课程一个时,我使用了:

private void MyForm_Load(object sender, EventArgs e)
{
    BrightIdeasSoftware.Generator.GenerateColumns(this.olv, typeof(Class1));
}

如何实现这样的通用?

class Program
{
    static void Main(string[] args)
    {
        List<Class1> list1 = new List<Class1>();
        list1.Add(new Class1(1, "Word"));
        list1.Add(new Class1(2, "Excel"));
        list1.Add(new Class1(3, "Access"));

        List<Class2> list2 = new List<Class2>();
        list2.Add(new Class2(10, "Jhon", "City1"));
        list2.Add(new Class2(15, "Ruby", "City2"));
        list2.Add(new Class2(20, "William", "City3"));

        MyForm form = new MyForm();
        form.SetData(list1); // ?
    }
}

class MyForm
{
    List<T> data = // ?

    public void SetData<T>(List<T> data)
    {
        this.data = data; // ?
    }     
}

class Class1
{
    public int ID { get; set; }
    public string Name { get; set; }

    public Class1(int id, string name)
    {
        ID = id;
        Name = name;
    }
}

class Class2
{
    public int Num { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }

    public Class2(int num, string name, string address)
    {
        Num = num;
        Name = name;
        Address = address;
    }
}

1 个答案:

答案 0 :(得分:0)

目前还不是很清楚你在问什么。但是,如果您的意思是您目前拥有专门用于处理MyForm的类Class1,现在您希望扩展该类,以便它可以处理Class1和{{1你可能需要两个不同的表单类。

您已声明Class2Class1是完全独立的类,没有公共基类或接口。鉴于此,没有多态方式让一些代码对两个不同类的实例进行操作。 (如果您关心的只是Class2属性,那么两个类中都存在一个成员,Name可能适合您。)

为了最大限度地减少额外工作,您可以创建一个通用基类来处理特定于dynamicClass1的所有内容。 E.g:

Class2

在每个派生类中,您将实现特定于partial class MyForm<T> : Form { List<T> data; public void SetData<T>(List<T> data) { this.data = data; } } partial class MyClass1Form : MyForm<Class1> { ... } partial class MyClass2Form : MyForm<Class2> { ... } Class1的每个代码。

但请注意,Visual Studio Winforms Designer无法处理具有通用基类的类。

有可能你不是抽象Class2子类本身,而是抽象数据的访问器/处理程序,这样可以使用单个Form类而不会混淆Designer,但是仍然可以使用多种数据类型。但是如果你的问题没有更多的背景,就不可能肯定地说出它的样子。它完全取决于MyForm实际使用传入列表的方式。

相关问题