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

3
我知道可以通过应用程序设置来完成此操作,但我想以这种方式完成:
我有一些文本框和其他控件,它们具有“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属性。但问题是,我的控件都分散在嵌套的面板等组件中,因此我必须进行大量的循环操作,将它们的标签与保存在文件中的标签进行比较(请注意,我不会将所有控件都保存在文本文件中,只保存其中一些!)。
该怎么办?
3个回答

4
如果您可以访问表单的Controls属性,您可以通过控件名称查找控件。
  var textBox = yourForm.Controls.Find("name", true) as TextBox;
  if(textBox != null)
       textBox.Text = "text"; 

Form.Controls.Find() 方法能否找到嵌套在面板或布局面板中的控件? - Dumbo
1
是的,如果第二个参数为真,则会在子控件(面板、组框等)中搜索。 - Stecya

1

将所有控件存储在一个键值对容器中,其中键是控件的名称,值是对控件本身的引用。您可以使用字典来存储它们。从文本文件加载时,使用键查找相应的控件并设置文本。


1

你的问题不太清楚。我理解的是你想将文本属性写入文本文件,然后通过 txt 文件进行恢复。如果是这样,那么在 Winform 中有一个简单的解决方案。

要保存,请使用格式控制名称:文本 稍后加载时 使用

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返回一个Control对象,如果您想执行任何特定操作,请进行类型转换然后应用。 另外,如果您尝试访问
希望能帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接