使用文本文件保存和加载TextBox或其他控件值

时间:2011-11-29 10:42:14

标签: c# winforms file io controls

我知道这可以通过应用程序设置来完成,但我想这样做:

我有一些文本框和其他具有Text属性的控件。我正在循环并将它们的NameText属性保存在文本文件中。保存声明如下:

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标签和我保存的文件中可用的标签(请注意,我不会保存文本文件中的所有控件,只是其中一些!)

怎么办?

3 个答案:

答案 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然后应用。 此外,如果您尝试访问

希望有所帮助。