使用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";
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或最后的反射。
但避免在这种简单的情况下使用反思。