使用C#中的其他变量字符串访问变量? EVAL?

时间:2012-02-09 04:37:29

标签: c# winforms

我有一个表单,有很多设置页面。所有页面都是相同的,所以我宁愿只创建一个表单,然后传入它应该编辑的设置的名称。我该怎么做?让我们说这个表单叫做“ConfigForm”,我希望能够用这样的东西来调用它:

new ConfigForm("event1").Show();

简单,这会拉出ConfigForm,并发送字符串“event1”。但是,知道我正在寻找设置“event1”,我现在如何访问此设置?通常访问一个设置,我假设我会使用这样的东西:(event1是一个StringCollection)

string varName = Properties.Settings.Default.passedString[3];

当event1存储在变量“passedString”中时,如何将“event1”放入字符串中?在PHP中,我会使用像EVAL这样的东西。我怎么用C#来做?

----编辑

以前的答案解决了“设置”问题;但它没有回答基本问题。如何使用变量中传递的字符串作为变量标识符?所以,如果我有一个名为“passString”的字符串,其中存储了文本“event1”...我将如何转换:

this.(passedString).Text = "test";

this.event1.Text = "test";

3 个答案:

答案 0 :(得分:1)

Default继承自SettingsBase,具有以下属性:

Object this[
    string propertyName
] { get; set; }

所以你可以使用[]。不要忘记将其强制转换为StringCollection类,如下所示

((StringCollection)Properties.Settings.Default[passedSetting])[3]

如果你想更新你的StringColleciton,你可以这样得到它的引用:

StringCollection collection = (StringCollection)Properties.Settings.Default[passedSetting];
collection.Add("another value");
collection[3] = "replace";
Properties.Settings.Default[passedSetting] = collection; // We'd rather call the setter.

答案 1 :(得分:0)

在希望将参数传递给的表单中定义构造函数。

public class MyForm : Form
{
    protected readonly string setting;

    public MyForm(string setting)
    {
        this.setting = setting;
    }
}


// to open
(new MyForm("event1")).Show();

答案 2 :(得分:0)

要通过字符串键获取/设置设置,请使用Settings.Default.this [] indexer。

要在表单中获取/设置控件的属性,可以使用这种简单的技术:

this.Controls["button1"].Text = "someText";

// or
this.Controls.Find("button1", true).First().Text = "someText";

如果涉及表格或任何其他物品的任何财产,你可以使用自己的特殊设定者或最后reflection

但在这种简单的情况下避免使用反射。