【问题标题】:Saving and loading TextBox or other control values with a text file使用文本文件保存和加载 TextBox 或其他控件值
【发布时间】:2011-11-29 10:42:14
【问题描述】:

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

我有一些具有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 属性。但问题是我的控件都分散在侧面嵌套面板和类似的东西中,所以我必须做很多循环!将它们的标签与我保存的文件中可用的标签进行比较(请注意,我不会将所有控件保存在文本文件中,只是其中一些!)

怎么办?

【问题讨论】:

    标签: c# winforms file io controls


    【解决方案1】:

    如果您可以访问表单的 Controls 属性,则可以通过其名称找到控件

      var textBox = yourForm.Controls.Find("name", true) as TextBox;
      if(textBox != null)
           textBox.Text = "text"; 
    

    【讨论】:

    • Form.Controls.Fine() 是否可以找到嵌套面板或布局面板中的控件?
    • 是的,如果第二个参数为真,它将在子控件(面板、组框等)中搜索
    【解决方案2】:

    将所有控件存储在键值对容器中,其中键是控件的名称,值是对其自身的控件的引用。您可以使用Dictionary 来存储它们。从文本文件加载回来时,使用 键找到合适的控件并设置文本。

    【讨论】:

      【解决方案3】:

      你的问题不清楚。我的理解是你想将文本属性写入文本文件,然后通过 txt 文件恢复,如果是这样,那么它是一个直截了当的解决方案 [in 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 然后应用。 另外,如果您尝试访问

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-13
        • 1970-01-01
        • 2016-01-25
        • 1970-01-01
        相关资源
        最近更新 更多