下次运行应用程序时保存文本框值
Posted
技术标签:
【中文标题】下次运行应用程序时保存文本框值【英文标题】:saving Textbox values for next time I run an application 【发布时间】:2017-05-11 10:44:57 【问题描述】:我有一个包含 30 个文本框的表单,其中包含我在代码中设置的默认设置。用户可以选择更改它,但我想知道如何在下次运行应用程序时将用户选择的新值保存在一个(或多个)文本框中。 非常感谢
【问题讨论】:
使用配置文件,并保存更改 您可以将其保存在文本文件或 xml 文件或数据库中.....任何自己的第一次尝试? 存储方式有很多种:存储是DB,内置的config文件,自己的xml/json文件…… 您希望能够手动更改文件中的值吗? 我希望能够手动更改文本框的值,然后在下次打开应用程序时保存此更改 【参考方案1】:如果您不关心编辑保存的文件并且不打算重命名文本框或更改它们的布局,您可以将值的顺序留给编译器。用它来保存:
// first collect all values
List<string> allvalues = this.Controls.OfType<TextBox>().Select(x => x.Text).ToList();
// write to file
System.IO.File.WriteAllText("yourPath", String.Join(Environment.NewLine, allvalues));
这个用于加载:
//load the values:
string [] alllines = System.IO.File.ReadAllLines("yourPath");
List<TextBox> allTextboxes = this.Controls.OfType<TextBox>().ToList();
for (int i = 0; i < allTextboxes.Count; i++)
allTextboxes[i].Text = alllines[i];
解释:
this.Controls.OfType<TextBox>()
为您提供所有作为 Windows 窗体中的文本框的控件。
String.Join(Environment.NewLine, allvalues)
将所有值组合成一个由换行符分隔的字符串。
【讨论】:
非常感谢!请问如何使用配置文件? @MongZhu:很好的回答方式。【参考方案2】:app.config 是一个 XML 文件,其中包含许多可用的预定义配置部分并支持自定义配置部分。显示了一个用于设置名称mySetting
和mySetting2
的标记的示例
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="mySetting" value="myValue1"/>
<add key="mySetting2" value="myValue12" />
</appSettings>
</configuration>
为了使用配置文件,您必须添加对System.Configuration
的引用,这样您就可以使用ConfigurationManager
类。下面是一个读写app.config
文件的示例:
从 TEXTBOX 写入配置:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["mySetting"].Value=textBox1.Text;
config.Save();
从配置中读取:
var mySetting = ConfigurationManager.AppSettings["mySetting"];
【讨论】:
【参考方案3】:解决这个问题的简单方法:
//To write textbox values to file (may be used on form close)
using (System.IO.StreamWriter sw = new StreamWriter("values.txt"))
foreach (var control in this.Controls)
if (control is TextBox)
TextBox txt = (TextBox)control;
sw.WriteLine(txt.Name + ":" + txt.Text);
//To read textbox values from file (may be used on form load)
using (System.IO.StreamReader sr = new StreamReader("values.txt"))
string line = "";
while((line=sr.ReadLine()) != null)
//Ugly, but work in every case
string control = line.Substring(0, line.IndexOf(':') );
string val = line.Substring(line.IndexOf(':') + 1);
if(this.Controls[control] != null)
((TextBox)this.Controls[control]).Text = val;
【讨论】:
【参考方案4】:将值保存在文件中。对于 30 个文本字段,您可以使用 30 行或仅使用逗号分隔值。
当用户更改值然后在该文件中写入新值时,下次启动时您将在文件中有新值,并且每次都不必读取旧数据。
【讨论】:
这个答案可能需要更多的阐述。也许是一些代码示例,说明 how 将文本保存到文件/从文件加载/加载文本以及 where 执行此操作,而不仅仅是高级解释;否则,这已在 cmets 中提出。 HTH以上是关于下次运行应用程序时保存文本框值的主要内容,如果未能解决你的问题,请参考以下文章
我在尝试将 winforms 文本框值保存到连接的 MS 访问数据库时出错