我知道这可以通过应用程序设置来完成,但我想这样做:
我有一些文本框和其他具有Text
属性的控件。我正在循环并将它们的Name
和Text
属性保存在文本文件中。保存声明如下:
if (ctrl != null) sb.AppendLine(ctrl.Name.ToString() + ":" + ctrl.Text);
当我想要加载它们时我想这样做,但由于我不能指向控件的名称,我被困住了! (我相信在PHP中可以使用其他变量指向变量!)
using (StreamReader file = new StreamReader(ofile.FileName))
{
while((line = file.ReadLine()) != null)
{
if (line.StartsWith("#")) continue; //Line is a commment so skip
else
{
data = line.Split(':');
//How to set back the text property to the variable?
}
}
}
我现在想到的是保存控件的Tag
属性而不是Name
属性。但问题是我的控件都是侧面嵌套面板和类似的东西,所以我必须做很多循环!比较theire标签和我保存的文件中可用的标签(请注意,我不会保存文本文件中的所有控件,只是其中一些!)
怎么办?
答案 0 :(得分:4)
如果您可以访问表单的控件属性
,则可以通过它的名称找到控件 var textBox = yourForm.Controls.Find("name", true) as TextBox;
if(textBox != null)
textBox.Text = "text";
答案 1 :(得分:1)
将所有控件存储在键值对容器中,其中key是控件的名称,value是对自身控件的引用。您可以使用Dictionary来存储它们。从文本文件加载时,使用键找到适当的控件并设置文本。
答案 2 :(得分:1)
你的问题不清楚。我明白你想要将文本属性写入文本文件,然后通过txt文件恢复,如果是这样,那么它是一个直接的解决方案[在Winform中]
保存使用格式control-name:text 以后加载 使用
this.Controls[<controlname>].Text=Text
即。在你的背景下
while((line = file.ReadLine()) != null)
{
if (line.StartsWith("#")) continue; //Line is a commment so skip
else
{
string[] data = line.Split(':');
if(data.Length>0)
{
if(this.Controls.ContainsKey(data[0]))
{
if(this.Controls[data[0]] is TextBox)
{
//generic
// this.Controls[data[0]].Text=data[1];
//or use
((TextBox) this.Controls[data[0]]).Text=data[1];
}
}
}
}
}
请注意,如果您想要执行任何特定操作,this.Controls会返回一个控制对象,请键入Cast然后应用。 此外,如果您尝试访问
希望有所帮助。