使用变量来访问类属性

时间:2014-01-20 11:30:35

标签: c# winforms

我有一个数据类(简化)

public class Transport
{
    public int TransId;
    public string TType;
    public string Color;
    public string Size;
}

Transport t1 = new Transport();
populate(t1)

我在Windows窗体上填充文本框控件。我的文本框具有相同的名称(TransId, TType, Color, Size)。还有更多,所以我要做的是使用文本框的名称来访问数据。像......那样......

foreach (TextBox tb in this.Controls.OfType<TextBox>())
{
    tb.Text = t1.(tb.Name);
}

这可能吗?这是一个好主意还是我应该坚持TransId.Text = t1.TransId等?

1 个答案:

答案 0 :(得分:3)

我建议您手动为控件分配属性值(特别是如果只想显示值)或使用数据绑定将类属性绑定到控件:

  • 选择一个TextBox并转到(DataBindings)属性
  • 对于Text绑定,请选择添加项目数据源... 选项
  • 选择对象数据源类型
  • 选择您的Transport类型

这会将transportBindingSource添加到您的应用中。现在,您可以选择每个TextBox并将其绑定到Transport对象中的一个属性:

enter image description here

现在您只需要将Transport实例添加到绑定源:

private Transport transport;

public Form1()
{
    InitializeComponent();

    transport = new Transport { 
                   TransId = 42, 
                   Color = "White", 
                   Size = "Big"
                   // ...
                };

    transportBindingSource.Add(transport);
}

结果:

enter image description here

绑定的好处是它可以双向工作 - 当您在TextBox中编辑值时,将更新传输对象属性。


注意:如果您只想显示对象的所有属性的值,请考虑使用PropertyGrid

 propertyGrid.SelectedObject = transport;

enter image description here