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

使用C#中的其他变量字符串访问变量?评估?,c#,winforms,C#,Winforms,我有一个表格,有很多设置页面。所有的页面都是相同的,所以我宁愿只创建一个表单,然后传入它应该编辑的设置的名称。我该怎么做?假设表单名为“ConfigForm”,我希望能够用如下方式调用它: new ConfigForm("event1").Show(); 很简单,这将调出ConfigForm,并发送字符串“event1”。但是,知道我正在寻找设置“event1”,我现在如何访问此设置?通常要访问设置,我假设我会使用如下内容:(event1是StringCollection) 当event1存储

我有一个表格,有很多设置页面。所有的页面都是相同的,所以我宁愿只创建一个表单,然后传入它应该编辑的设置的名称。我该怎么做?假设表单名为“ConfigForm”,我希望能够用如下方式调用它:

new ConfigForm("event1").Show();
很简单,这将调出ConfigForm,并发送字符串“event1”。但是,知道我正在寻找设置“event1”,我现在如何访问此设置?通常要访问设置,我假设我会使用如下内容:(event1是StringCollection)

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

----编辑

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

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


以希望参数传递给的形式定义构造函数

public class MyForm : Form
{
    protected readonly string setting;

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


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

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.

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

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

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

// or
this.Controls.Find("button1", true).First().Text = "someText";
如果涉及到窗体或任何其他对象的任何属性,您可以使用自己的特殊设置器,或者最终使用


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

你错过了问题的后半部分。它可能看起来像
Properties.Settings.Default[setting]=someControl.Text
。老实说,我甚至不理解问题的后半部分。这并不能回答我的问题。。。我需要访问名为“event1”的设置,而无需在代码中明确定义event1。“event1”是以字符串形式传递的。@JasonAxelrod-配置提供程序基本上是一个字典,上面有非常动态生成的属性,只需将属性名传递给它的索引器属性并分配它即可。如果希望保存,请记住在完成后调用Save。最好将
:this()
添加到构造函数行的末尾,在Visual Studio中生成的表单通常在默认构造函数中调用
InitializeComponent()
。这正是我在获取数据时所要寻找的。。。关于设置数据我能做些什么?这适用于设置。。。但是我如何处理其他表单项呢?例如,如果我想编辑“this.(passedSetting).Text”,该怎么办。如果没有某种评估,这怎么可能呢?我知道你想要什么,因为我自己从VFP世界搬来,在那里你必须经常使用评估。我在C#工作的时候已经很多年没有用过这样的东西了。也许你需要看看C语言,我总是想办法把字符串作为参数传递,而不是编译代码和求值。你也可以看看这里,但我不建议在你的任务中再这样做。First()是LINQ扩展,因此您必须添加使用System.LINQ来访问此扩展(并且.NET>=3.5)
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.
this.Controls["button1"].Text = "someText";

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