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

本文关键字:变量 字符串 访问 EVAL 其他 使用 | 更新日期: 2023-09-27 18:23:47

我有一个表单,里面有很多设置页面。所有的页面都是一样的,所以我宁愿只制作一个表单,然后输入它应该编辑的设置的名称。我该怎么做?假设这个表单被称为"ConfigForm",我希望能够用这样的东西来称呼它:

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

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

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

当event1存储在变量"passedString"中时,如何将"event1"放在字符串中?在PHP中,我会使用类似EVAL的东西。在C#中我该怎么做?

----编辑

之前的答案已经解决了"设置"问题;但这并不能回答根本问题。如何使用变量中传递的字符串作为变量标识符?所以,如果我有一个名为"passedString"的字符串,其中存储了文本"event1"…我该如何转换它:

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

进入

this.event1.Text = "test";

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

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.

以您希望参数传递到的形式定义构造函数。

public class MyForm : Form
{
    protected readonly string setting;
    public MyForm(string setting)
    {
        this.setting = setting;
    }
}

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

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

要在窗体中获取/设置控件的属性,可以使用以下简单技术:

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

如果涉及到一个形式或任何其他对象的任何属性,你可以使用你自己的特殊setter或最后的反射。

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