2011-11-29 75 views
3

我知道这是可能要与应用程序设置完成,但我想这样做,这样其他控制值:保存和加载文本框或文本文件

我有一些文本框和其他控件有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? 
      } 
     } 
} 

我心目中现在,是节约的控制,而不是theire Name财产Tag财产。但问题是我的控件都在侧面嵌套面板和类似的东西,所以我必须做很多LOOPING!比较他们的标签与标签avilable在我保存的文件(注意,我不会保存文本文件中的所有控件,只是一些em!)

怎么办?

回答

4

你可以找到它的名字控制,如果你有机会到窗体的控件属性

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

'Form.Controls.Fine()'是否可以找到嵌套面板或布局面板中的控件? –

+1

是的,如果第二个参数是真的,它会在子控件(面板,groupboxes e.t.c)中搜索, – Stecya

1

存放在一个键值对的容器,其中关键是控制和值的名称你的所有控件是一个参考控制它自我。您可以使用Dictionary来存储它们。从文本文件加载回来时,使用键找到适当的控件并设置文本。

1

你的问题还不清楚。什么我理解是要text属性写入一个文本文件,后来通过txt文件恢复,如果这样的话它是一个简单明了的解决方案[在winform]

保存使用的格式控制-name:文本 后来负载 使用

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,然后单击“应用”。 此外,如果您尝试访问

希望有所帮助。

相关问题