0

差不多,我想做的是创建一个属性网格。它将包含输入 0-5 或输出 1-64 之类的内容,这些内容将具有名称、id 等子属性。现在我的代码非常简单,我单独初始化每个。当我想将它们保存到文本文件并意识到这样做会导致代码墙时,这导致了一个问题。除了能够执行 for 循环之外,我还必须单独抓取每个循环以写入文本文件。我想知道是否有更好的方法来使用数组或列表来执行此操作。

这是我现在所拥有的:

        [CategoryAttribute("Input 0"), DescriptionAttribute("Name of Input 0"), DisplayName("Input 0: Name")]
    public string IName_0
    {
        get {return _Iname[0];}
        set {_Iname[0] = value;}
    }

    [CategoryAttribute("Input 0"), DescriptionAttribute("ID of Input 0"), DisplayName("Input 0: ID")]
    public int IID_0
    {
        get { return _IID[0]; }
        set { if ((64 > value) && (value >= 0)) _IID[0] = value; }
    }
    [CategoryAttribute("Input 1"), DescriptionAttribute("Name of Input 1"), DisplayName("Input 1: Name")]
    public string IName_1
    {
        get { return _Iname[1]; }
        set { _Iname[1] = value; }
    }

    [CategoryAttribute("Input 1"), DescriptionAttribute("ID of Input 1"), DisplayName("Input 1: ID")]
    public int IID_1
    {
        get { return _IID[1]; }
        set { if ((64 > value) && (value >= 0)) _IID[1] = value; }

对于每个输入,它都会这样进行。我一直在到处寻找,我找不到一个好的解决方法。

4

1 回答 1

0

首先,您必须意识到,将您的属性包含在一个集合中会导致它们在您的 PropertyGrid 上显示时被组合在一起。因此,拥有一个s 和另一个s
的集合将破坏您当前的结构,即: stringint

  1. 将成对的属性(名称和 ID)组合在一起;
  2. 在属性网格的根级别上拥有所有属性。

话虽如此,您可以通过使 #2 变得更糟来解决问题 #1。
创建两个类:

  • MyClass- 包含一个NameIID属性。
  • MyClassCollection- 一个容器类(很可能使用底层列表)。

为了缓解问题 #2,您可以添加代码以在初始化时展开所有节点,如下所示

如果您尝试这样做,您会注意到“容器”(MyClassCollectionMyClass)在显示时旁边会出现一些不需要的说明文本。这就是本文派上用场的地方。

您的财产将是:

[DisplayName("Some info here"),
DescriptionAttribute("Some more descriptive info here...")]
virtual public MyClassCollection MyData { get; set; }

并且您的类定义将类似于:

public class MyClass
{
    public string Name
    {
        get { return _name;  }
        set { _name = value; }
    }

    public int IID
    {
        get { return _iid; }
        set { if ((64 > value) && (value >= 0)) _iid = value; }
    }

    private string _name;
    private int    _iid;
}

public class MyClassCollection : CollectionBase
{
    // See the article for code for the overrides (for CollectionBase) and implementation (for ICustomTypeDescriptor)
}

如果你看上面提到的文章,关于容器类的显示文本的调整,你必须对上面的类进行一些调整。

于 2013-12-05T17:46:56.743 回答