0

我正在创建一个程序,用户正在创建一个操作列表。可能的操作都有多个需要指定的属性。我想在列表框中显示这些属性,类似于 Visual Studio 在设计模式下显示对象属性的方式。字符串获取文本框,布尔值获取复选框等。我已经弄清楚如何在列表中显示对象的成员,但我正在努力弄清楚如何为每个控件创建回调。基本结构如下:

    void createPropertyList(object move)
    {
        Type type = move.GetType();
        FieldInfo[] fields = type.GetFields();
        propertyListBox.Items.Clear();

        foreach (var field in fields)
        {
            string name = field.Name;
            object temp = field.GetValue(move);

            if (temp is double)
            {
                double value = (double)temp;
                Label l = new Label();
                l.Content = name;

                TextBox t = new TextBox();
                t.Text = value.ToString("0.0000");                    

                // put it in a grid, format it, blah blah blah    

                propertyListBox.Items.Add(grid);
            }

            // reflect on other types
        }
    }

我假设将涉及一个 lambda,但我如何恢复 FieldInfo 数组以实际引用这些成员,以便我可以将用户的输入放回对象中?

4

4 回答 4

1

抱歉,我应该查看 FieldInfo。GetValue 有一个对应的 SetValue。奇迹般有效。

于 2012-11-01T15:21:34.837 回答
0

您需要为所有类型的控件创建状态更改事件处理程序。

例如文本框

...
TextBox t = new TextBox();
t.Tag=name;
t.KeyUp+=t_KeyUp;

在哪里

private void t_KeyUp(object sender, KeyEventArgs e)
{
    TextBox source = (sender as TextBox);
    MessageBox.Show("Field "+source.Tag + " is changed. New value is "+source.Text);
}
于 2012-11-01T15:27:54.857 回答
0

您可能会考虑使用 Binding 和 DependencyPropertys 来绑定各种控件。它是一种更 WPF 的方式来执行此操作。

于 2012-11-01T15:24:37.680 回答
0

您已经可以控制:http: //msdn.microsoft.com/en-us/library/aa302326.aspx

于 2012-11-01T15:45:40.240 回答