求助:winform子窗体控件值保存的问题

zzk2129 2015-01-18 09:22:43
一个主窗体,两三个子窗体,通过主窗体打开子窗体编辑里面textbox中的内容,然后保存关闭子窗体。主窗体调用子窗体里面的值进行运算。
求教各位大神,程序运行时,该如何实现保存子窗体里面textbox控件的值?程序退出时,该如何保存所有窗体里面的值?新手上路,全靠自己摸索,还望大家不吝赐教,先谢谢了!
...全文
305 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzk2129 2015-01-20
  • 打赏
  • 举报
回复
引用 16 楼 Z65443344 的回复:
首先思路就有问题 不要在程序退出时保存所有窗口里的值 因为这时候可能某些窗口早就关闭了,或者从未打开过 前台控件是前台控件,后台变量是后台变量 你应该将窗口中的控件和一组全局变量关联起来,创建并打开窗口的时候用全局变量给控件赋值,关闭窗口的时候将控件值更新回全局变量,程序退出的时候全局变量写入文件,打开程序的时候读文件给全局变量赋值.就这么简单 至于到底用什么文件,形式就多了.比如xml,比如txt,比如excel,数据库文件,二进制文件,都是可以的.看你会用哪个就用哪个.
请原谅我这个新手,什么文件形式的存储都不会。。。。。可以教教我怎么用excel保存么?
zzk2129 2015-01-20
  • 打赏
  • 举报
回复
引用 16 楼 Z65443344 的回复:
首先思路就有问题 不要在程序退出时保存所有窗口里的值 因为这时候可能某些窗口早就关闭了,或者从未打开过 前台控件是前台控件,后台变量是后台变量 你应该将窗口中的控件和一组全局变量关联起来,创建并打开窗口的时候用全局变量给控件赋值,关闭窗口的时候将控件值更新回全局变量,程序退出的时候全局变量写入文件,打开程序的时候读文件给全局变量赋值.就这么简单 至于到底用什么文件,形式就多了.比如xml,比如txt,比如excel,数据库文件,二进制文件,都是可以的.看你会用哪个就用哪个.
您的思路我可以理解,但是C#怎么声明全局变量呢?
於黾 2015-01-20
  • 打赏
  • 举报
回复
首先思路就有问题 不要在程序退出时保存所有窗口里的值 因为这时候可能某些窗口早就关闭了,或者从未打开过 前台控件是前台控件,后台变量是后台变量 你应该将窗口中的控件和一组全局变量关联起来,创建并打开窗口的时候用全局变量给控件赋值,关闭窗口的时候将控件值更新回全局变量,程序退出的时候全局变量写入文件,打开程序的时候读文件给全局变量赋值.就这么简单 至于到底用什么文件,形式就多了.比如xml,比如txt,比如excel,数据库文件,二进制文件,都是可以的.看你会用哪个就用哪个.
timelight2000 2015-01-19
  • 打赏
  • 举报
回复
确实方法太多了。任意一种保存数据的方式都能实现。 给一个看起来规范点的方法:读写INI文件。下面是一个类,提供了INI文件的读写操作。
public class INIClass
{
 public string inipath;
 [DllImport("kernel32")]
 private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
 [DllImport("kernel32")]
 private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="INIPath">文件路径</param>
 public INIClass(string INIPath)
 {
  inipath = INIPath;
 }
 /// <summary>
 /// 写入INI文件
 /// </summary>
 /// <param name="Section">项目名称(如 [TypeName] )</param>
 /// <param name="Key">键</param>
 /// <param name="Value">值</param>
 public void IniWriteValue(string Section,string Key,string Value)
 {
  WritePrivateProfileString(Section,Key,Value,this.inipath);
 }
 /// <summary>
 /// 读出INI文件
 /// </summary>
 /// <param name="Section">项目名称(如 [TypeName] )</param>
 /// <param name="Key">键</param>
 public string IniReadValue(string Section,string Key)
 {
  StringBuilder temp = new StringBuilder(500);
  int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath);
  return temp.ToString();
 }
 /// <summary>
 /// 验证文件是否存在
 /// </summary>
 /// <returns>布尔值</returns>
 public bool ExistINIFile()
 {
  return File.Exists(inipath);
 }
}
使用的时候直接调用就可以了
衣舞晨风 2015-01-19
  • 打赏
  • 举报
回复
http://blog.csdn.net/jiankunking/article/details/17992159
zzk2129 2015-01-19
  • 打赏
  • 举报
回复
引用 7 楼 FoxDave 的回复:
[quote=引用 4 楼 zzk2129 的回复:] [quote=引用 2 楼 FoxDave 的回复:] 参考 ------------------------------------------------------------------------------------------- 请为参加博客之星的我投上一票感激之至
谢谢回复,票投了,链接看了,传值问题我已经搞定,我想问的是该怎么保存form2中控件的值,下次打开的时候看到的是最后一次输入的值。[/quote] 对的 常态化保存,那你需要保存到程序的配置文件,如XML,或者文本文件中 一般是用于配置程序的文件,形式多种多样,就看你怎么存怎么取了[/quote] 可以简单介绍一种方式么?初学者实在不知道从哪里下手。
chenlexia0519 2015-01-19
  • 打赏
  • 举报
回复
XML保存可以。或者你直接把子窗体定义为主窗体的全局私有成员。
迷迷520 2015-01-19
  • 打赏
  • 举报
回复
C# 对 XML 很好的支持。建议使用
wyx100 2015-01-19
  • 打赏
  • 举报
回复
引用 6 楼 wyd1520 的回复:
xml; txt; ini; db 都可以保存
exception92 2015-01-19
  • 打赏
  • 举报
回复
其实就是窗体间 传值的问题。 http://bbs.csdn.net/topics/390128592
zzk2129 2015-01-19
  • 打赏
  • 举报
回复
引用 8 楼 duanzi_peng 的回复:
其实就是窗体间 传值的问题。 http://bbs.csdn.net/topics/390128592
链接打不开,可以说的详细一点吗?谢谢!
Justin-Liu 2015-01-19
  • 打赏
  • 举报
回复
引用 4 楼 zzk2129 的回复:
[quote=引用 2 楼 FoxDave 的回复:] 参考 ------------------------------------------------------------------------------------------- 请为参加博客之星的我投上一票感激之至
谢谢回复,票投了,链接看了,传值问题我已经搞定,我想问的是该怎么保存form2中控件的值,下次打开的时候看到的是最后一次输入的值。[/quote] 对的 常态化保存,那你需要保存到程序的配置文件,如XML,或者文本文件中 一般是用于配置程序的文件,形式多种多样,就看你怎么存怎么取了
本拉灯 2015-01-18
  • 打赏
  • 举报
回复
xml; txt; ini; db 都可以保存
zzk2129 2015-01-18
  • 打赏
  • 举报
回复
查了一些资料,这个是不是需要用XML保存?
zzk2129 2015-01-18
  • 打赏
  • 举报
回复
引用 2 楼 FoxDave 的回复:
参考 ------------------------------------------------------------------------------------------- 请为参加博客之星的我投上一票感激之至
谢谢回复,票投了,链接看了,传值问题我已经搞定,我想问的是该怎么保存form2中控件的值,下次打开的时候看到的是最后一次输入的值。
zzk2129 2015-01-18
  • 打赏
  • 举报
回复
引用 1 楼 cjdxhc 的回复:
在主窗体里定义一个全局的变量即可。 public static string txt = null; 在子窗体关闭的时候。 MainForm.txt = textbox1.Text; 在主窗体的时候再读取这个MainForm.txt就可以了。
您的方法可以帮我解决一部分问题,谢谢。但是当我关闭子窗体(此时主窗口还在运行)再重新打开,里面的值又变成原来的默认值了,这个怎么解决?
Justin-Liu 2015-01-18
  • 打赏
  • 举报
回复
参考 ------------------------------------------------------------------------------------------- 请为参加博客之星的我投上一票感激之至
cjdxhc 2015-01-18
  • 打赏
  • 举报
回复
在主窗体里定义一个全局的变量即可。 public static string txt = null; 在子窗体关闭的时候。 MainForm.txt = textbox1.Text; 在主窗体的时候再读取这个MainForm.txt就可以了。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧