CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

50分求一段代码,关于savesetting和getsetting的

楼主caslonsj(匪兵甲)2006-03-01 15:53:41 在 VB / 基础类 提问

小弟的窗体上有一个按钮command1_click()  
  还有20个textbox,分别是text1.text--text20.text  
   
  现在我需要在这20个textbox中输入数字,然后点击command按钮,就可以自动保存这20个参数。  
   
  哪位大大能帮忙给出详细代码?  
   
  欢迎各位不吝赐教 问题点数:50、回复次数:30Top

1 楼laviewpbt(人一定要靠自己)回复于 2006-03-01 15:58:25 得分 0

用控件数组Top

2 楼caslonsj(匪兵甲)回复于 2006-03-01 15:58:58 得分 0

补充一下,这20个参数如果不修改,则每次都显示上次输入的数字Top

3 楼caslonsj(匪兵甲)回复于 2006-03-01 15:59:51 得分 0

请问,能给出详细代码么??  
   
  上次我问有人说用savesetting,不过我不太明白,你能帮帮忙么?Top

4 楼tztz520(午夜逛街)回复于 2006-03-01 16:01:17 得分 5

就是保存在注册表中Top

5 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-01 16:01:17 得分 30

同上,把控件做成数组,用For   循环来做Top

6 楼caslonsj(匪兵甲)回复于 2006-03-01 16:02:13 得分 0

两位大大能不能给出点详细的代码Top

7 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-01 16:03:16 得分 0

GetSetting和SaveSetting参考(或者去看MSDN):  
   
  '读取注册表的值,并删除注册表里的项目  
  Private   Sub   Form_Load()  
          Check1.Value   =   GetSetting("AppCheck",   "Check",   "CheckValue")  
          Text1.Text   =   GetSetting("AppText",   "Text",   "TextValue")  
          DeleteSetting   "AppCheck",   "Check",   "CheckValue"  
          DeleteSetting   "AppText",   "Text",   "TextValue"  
  End   Sub  
   
  '保存设置值到注册表  
  Private   Sub   Form_Unload(Cancel   As   Integer)  
          SaveSetting   "AppCheck",   "Check",   "CheckValue",   Check1.Value  
          SaveSetting   "AppText",   "Text",   "TextValue",   Text1.Text  
  End   SubTop

8 楼caslonsj(匪兵甲)回复于 2006-03-01 16:07:11 得分 0

faysky2()    
   
  感谢你的回帖,不过我对每个参数的意思都不太明白,结合我的这个窗体,你能帮我写一个例子么?Top

9 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-01 16:19:53 得分 0

MSDN:  
   
  GetSetting   函数  
               
   
  从   Windows   注册表中的应用程序项目返回注册表项设置值。  
   
  语法  
   
  GetSetting(appname,   section,   key[,   default])  
   
  GetSetting   函数的语法具有下列命名参数:  
   
  部分   描述    
   
  appname   必要。字符串表达式,包含应用程序或工程的名称,要求这些应用程序或工程有注册表项设置。    
  section   必要。字符串表达式,包含区域名称,要求该区域有注册表项设置。    
  key   必要。字符串表达式,返回注册表项设置的名称。    
  default   可选。表达式,如果注册表项设置中没有设置值,则返回缺省值。如果省略,则   default   取值为长度为零的字符串   ("")。    
   
   
  说明  
   
  如果   GetSetting   的参数中的任何一项都不存在,则   GetSetting   返回   default   的值。  
   
  =============================================================================  
   
  SaveSetting   语句  
               
   
  在   Windows   注册表中保存或建立应用程序项目。  
   
  语法  
   
  SaveSetting   appname,   section,   key,   setting  
   
  SaveSetting   语句的语法具有下列命名参数:  
   
  部分   描述    
   
  appname   必要。字符串表达式,包含应用程序或工程的名称,对这些应用程序或工程使用设置    
  section   必要。字符串表达式,包含区域名称,在该区域保存注册表项设置。    
  key   必要。字符串表达式,包含将要保存的注册表项设置的名称。    
  setting   必要。表达式,包含   key   的设置值。    
   
   
  说明  
   
  如果无论如何也不能保存注册表项设置,则将导致错误发生。  
   
  Top

10 楼caslonsj(匪兵甲)回复于 2006-03-01 16:24:33 得分 0

那么是不是说我的key   和   setting   要有20个?  
   
  如果是的话,那么有没有一个效率更高的办法?Top

11 楼lv1(CODER不易做)回复于 2006-03-01 16:24:37 得分 0

晕,这种东西都保存到注册表,怪不得现在提倡绿色软件了,我建议你保存在文本文件中,比保存在注册表环保啊Top

12 楼lv1(CODER不易做)回复于 2006-03-01 16:29:35 得分 15

给个一般做法,打开窗体读保存的文本文件,将里面的数据分配给你的text,点保存对文本文件更新就可以,代码自己去写,因为当你知道怎么操作文本文件后非常简单的Top

13 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-01 16:32:28 得分 0

那么是不是说我的key   和   setting   要有20个?  
  ----------------------------------------------  
  是的  
   
   
  如果是的话,那么有没有一个效率更高的办法?  
  -------------------------------------------  
  同楼上,如果数据不是很重要的话,建议保存到文本文件  
  Top

14 楼lv1(CODER不易做)回复于 2006-03-01 16:33:58 得分 0

好事做到底吧,给你个写文件的涵数,这是写单个到文件的东西,你自己改下  
  '写文件操作  
  Public   Function   WriteFile(strWhat   As   String,   strFilePath   As   String,   strFileName   As   String)   As   Boolean  
  WriteFile   =   False  
             
            On   Error   GoTo   ErrorHandl  
             
            Dim   txtFile   As   String  
            Dim   intFlag   As   Integer  
             
            txtFile   =   strFilePath   &   strFileName  
            intFlag   =   8  
             
            If   fso.FileExists(txtFile)   =   False   Then  
                  fso.CreateTextFile   txtFile,   True  
                  intFlag   =   2  
            End   If  
            Set   fFile   =   fso.GetFile(txtFile)  
             
            Set   ts   =   fFile.OpenAsTextStream(intFlag,   -2)  
            ts.WriteLine   (strWhat)  
            ts.Close  
            WriteFile   =   True  
          Exit   Function  
  ErrorHandl:  
  End   FunctionTop

15 楼caslonsj(匪兵甲)回复于 2006-03-01 16:34:08 得分 0

数据不是很重要的,那么保存到文本文件的话怎么做呢?  
   
  能不能给一个能够实际运行的例子?Top

16 楼lv1(CODER不易做)回复于 2006-03-01 16:37:42 得分 0

失败,居然忘了给定义了,最恨犯这种错误了  
  Dim   fso   As   New   FileSystemObject  
  Dim   fFile   As   File  
  Dim   ts   As   TextStreamTop

17 楼lv1(CODER不易做)回复于 2006-03-01 16:45:18 得分 0

Declare   Function   GetPrivateProfileString   Lib   "kernel32"   Alias   "GetPrivateProfileStringA"   (ByVal   lpApplicationName   As   Any,   ByVal   lpKeyName   As   Any,   ByVal   lpDefault   As   String,   ByVal   lpReturnedString   As   String,   ByVal   nSize   As   Long,   ByVal   lpFileName   As   String)   As   Long  
             
  Declare   Function   WritePrivateProfileString   Lib   "kernel32"   Alias   "WritePrivateProfileStringA"   (ByVal   lpApplicationName   As   String,   ByVal   lpKeyName   As   Any,   ByVal   lpString   As   Any,   ByVal   lpFileName   As   String)   As   Long  
   
  Declare   Function   WritePrivateProfileSection   Lib   "kernel32"   Alias   "WritePrivateProfileSectionA"   (ByVal   lpAppName   As   String,   ByVal   lpString   As   Any,   ByVal   lpFileName   As   String)   As   Long  
  Declare   Function   WriteProfileString   Lib   "kernel32"   Alias   "WriteProfileStringA"   (ByVal   lpszSection   As   String,   ByVal   lpszKeyName   As   String,   ByVal   lpszString   As   String)   As   Long  
   
  Declare   Function   WritePrivateProfileString_A   Lib   "kernel32"   Alias   "WritePrivateProfileStringA"   (ByVal   lpApplicationName   As   String,   ByVal   lpKeyName   As   Any,   ByVal   lpString   As   Any,   ByVal   lpFileName   As   String)   As   Long  
   
   
  '读取.ini文件的某个键值  
  Public   Function   ReadFile_To_ini(appName   As   String,   KeyName   As   String,   filename   As   String)   As   String  
          Dim   s   As   String   *   256  
          On   Error   GoTo   ErrorHandl  
          GetPrivateProfileString   appName,   KeyName,   "",   s,   256,   filename  
          ReadFile_To_ini   =   s  
          Exit   Function  
  ErrorHandl:  
  End   Function  
   
  '写.ini文件  
  Public   Function   WriteFile_To_ini(appName   As   String,   KeyName   As   String,   AddString   As   String,   filename   As   String)   As   Boolean  
          WriteFile_To_ini   =   False  
          On   Error   GoTo   0  
          WritePrivateProfileString_A   appName,   KeyName,   AddString,   filename  
          WriteFile_To_ini   =   True  
  End   Function  
   
  '删除.ini文件中的某部分  
  Public   Function   DeleteFile_To_ini(appName   As   String,   KeyName   As   String,   filename   As   String)   As   Boolean  
          DeleteFile_To_ini   =   False  
          On   Error   GoTo   ErrorHandl  
          WritePrivateProfileString   appName,   KeyName,   0&,   filename  
          DeleteFile_To_ini   =   True  
          Exit   Function  
  ErrorHandl:  
  End   Function  
   
  '删除.ini文件中主键部分  
  Public   Function   DeleteFile_To_iniKey(appName   As   String,   filename   As   String)   As   Boolean  
          DeleteFile_To_iniKey   =   False  
          On   Error   GoTo   ErrorHandl  
          WritePrivateProfileSection   appName,   0&,   filename  
          DeleteFile_To_iniKey   =   True  
          Exit   Function  
  ErrorHandl:  
  End   Function  
   
  '在.ini文件中,根据某个键值,删除此键所在的项的所有键值  
  Public   Function   Delete_AllKeyValue_iniKey(KeyValue   As   String,   filename   As   String)   As   Boolean  
          Dim   temp   As   Integer  
          Dim   tar   As   String  
          Dim   appName()   As   String  
          Dim   key_Name()   As   String  
          Dim   varString   As   String  
          Dim   i   As   Integer  
          Dim   j   As   Integer  
          Dim   tempVar   As   String  
          Dim   tempArray()   As   String  
          Dim   str   As   String  
   
          Delete_AllKeyValue_iniKey   =   False  
           
          appName   =   ReadAllFile_To_iniApp(filename)  
           
          '根据键值找到项值  
          For   i   =   LBound(appName)   To   UBound(appName)   -   2  
                  key_Name   =   ReadAllFile_To_iniKey(appName(i),   filename)  
                  For   j   =   LBound(key_Name)   To   UBound(key_Name)   -   2  
                          varString   =   objStr.My_RightTrim(ReadFile_To_ini(appName(i),   key_Name(j),   filename))  
                           
                          If   KeyValue   =   varString   Then  
                                  str   =   appName(i)         '项值已经找到  
                                  Exit   For  
                          End   If  
                  Next  
          Next  
           
          If   DeleteFile_To_iniKey(str,   filename)   Then   Delete_AllKeyValue_iniKey   =   True  
           
  End   Function  
   
  用api更简单了Top

18 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-01 17:00:06 得分 0

那么保存到文本文件的话怎么做呢?  
  -----------------------------------  
  用Open语句来做就够了:  
  Private   Sub   Command1_Click()  
          Open   App.Path   &   "\test.txt"   For   OutPut   As   #1  
          Write   #1,Text1.Text  
          Close   #1  
  End   Sub  
  Top

19 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2006-03-01 17:46:03 得分 0

这样的内容如果不是软件的设置,而只是软件中的数据,那就别保存在注册表中。  
   
  建议保存在文本文件或数据库中Top

20 楼caslonsj(匪兵甲)回复于 2006-03-02 08:22:45 得分 0

用Open语句来做就够了:  
  Private   Sub   Command1_Click()  
          Open   App.Path   &   "\test.txt"   For   OutPut   As   #1  
          Write   #1,Text1.Text  
          Close   #1  
  End   Sub  
   
  --------------------------------  
   
  系统说实时错误424。。Top

21 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-02 09:10:43 得分 0

系统说实时错误424。。  
  ---------------------------  
  缺少对象,你的窗体上没有Text1控件吧?  
  上面的代码   是把Text的内容写到   当前目录下的test.txt文件里Top

22 楼caslonsj(匪兵甲)回复于 2006-03-02 09:16:54 得分 0

缺少对象,你的窗体上没有Text1控件吧?  
  上面的代码   是把Text的内容写到   当前目录下的test.txt文件里  
  -------------------  
   
  请问怎么添加?text1.text我的窗体上有啊。要新建一个text.txt文件么?Top

23 楼caslonsj(匪兵甲)回复于 2006-03-02 09:24:18 得分 0

faysky2()  
   
  我弄了一下,现在可以执行了  
   
  但是还有一个问题,就是我需要点一下command,把这个text的内容进行保存,然后下次打开的时候,text里面要显示我上次输入的数字,并且能够在其他窗体中调用。  
   
  现在看还不能做到这点阿~Top

24 楼caslonsj(匪兵甲)回复于 2006-03-02 09:27:14 得分 0

还有,我需要一次保存20个数据,你说的这个方法只能保存一个数据。请问怎么解决呢Top

25 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-02 09:27:21 得分 0

text1.text我的窗体上有啊。要新建一个text.txt文件么?  
  -----------------------------------  
  不是的,你的Text1控件是不是做成了数组呀。  
  如果你的Text1控件是数组的话(也就是它的Index属性不为空,而是一个数字),请把上面的代码改为这样:  
   
  Private   Sub   Command1_Click()  
          Dim   i%  
          Open   App.Path   &   "\test.txt"   For   OutPut   As   #1  
          For   i=0   to   Text1.Count-1  
                  Write   #1,Text1(i).Text   '把控件数组的内容写入文件里  
          Next  
          Close   #1  
  End   Sub  
  Top

26 楼caslonsj(匪兵甲)回复于 2006-03-02 09:53:29 得分 0

不是的,你的Text1控件是不是做成了数组呀。  
  如果你的Text1控件是数组的话(也就是它的Index属性不为空,而是一个数字),请把上面的代码改为这样:  
   
  Private   Sub   Command1_Click()  
          Dim   i%  
          Open   App.Path   &   "\test.txt"   For   OutPut   As   #1  
          For   i=0   to   Text1.Count-1  
                  Write   #1,Text1(i).Text   '把控件数组的内容写入文件里  
          Next  
          Close   #1  
  End   Sub  
   
  =========================  
   
  不是数组,麻烦你看看我上面说的问题怎么解决?  
   
  这么做每次只能保存一个数字在test.txt里面,而且下一次打开的时候还要重新输入参数Top

27 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-02 10:31:34 得分 0

这么做每次只能保存一个数字在test.txt里面,而且下一次打开的时候还要重新输入参数  
  ------------------------------------------  
  做成控件数组,代码会少写一些  
  做控件数组方法:[1]把那20个控件的都改为一样的名称,把它们的Index属性改为从0到19  
  或[2]把那些Text控件都删掉,只保留一个,然后复制它,再粘贴到窗体上,它会有   是否创建   控件数组的提示,选择是,然后继续粘贴,知道够了20个  
   
  写入数据:  
   
  Private   Sub   Command1_Click()  
          Dim   i%,   strTmp   As   String  
          For   i   =   Text1.LBound   To   Text1.UBound  
                  strTmp   =   strTmp   &   Text1(i).Text   &   ","  
          Next  
          strTmp   =   Left(Trim(strTmp),   Len(Trim(strTmp))   -   1)  
          Open   App.Path   &   "\test.txt"   For   Output   As   #1  
                  Print   #1,   strTmp     '把控件数组的内容写入文件里  
          Close   #1  
  End   Sub  
   
  读取数据:  
   
  Private   Sub   Form_Load()  
          Dim   i%,   strTmp   As   String,   strArr()   As   String  
          Open   App.Path   &   "\test.txt"   For   Binary   As   #1  
          strTmp   =   Space(LOF(1))  
          Get   #1,   1,   strTmp  
          Close   #1  
          strArr   =   Split(strTmp,   ",")  
          For   i   =   LBound(strArr)   To   UBound(strArr)  
                  Text1(i).Text   =   strArr(i)  
          Next  
  End   Sub  
  Top

28 楼caslonsj(匪兵甲)回复于 2006-03-02 10:45:16 得分 0

谢谢,faysky2()  
   
  可以用了  
   
  还有一个小问题,就是我如果需要在别的计算中调用这20个参数进行计算。请问该如何调用呢?  
   
  另外一个窗体也有一个text1.text了。Top

29 楼caslonsj(匪兵甲)回复于 2006-03-02 13:07:30 得分 0

faysky2()   还在么?Top

30 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-02 13:26:22 得分 0

直接引用那个窗体的控件就行了:  
   
  比如,你在Form2里需要用到Form1的Text1(0)的内容:  
  Form2里:  
  Private   Sub   Command1_Click()  
          MsgBox   Form1!Text1(0).Text      
  End   SubTop

相关问题

  • 求段代码
  • 几段代码
  • 一段小代码
  • ^_^,一段小代码?!
  • 一段小代码
  • 求一段代码
  • 求一段代码
  • 求2段代码
  • 求一段代码
  • 给段代码吧~~~

关键词

  • 控件
  • 代码
  • 文件
  • 应用程序
  • 语句
  • 数据
  • 语法
  • 注册表
  • 数组
  • 窗体

得分解答快速导航

  • 帖主:caslonsj
  • tztz520
  • faysky2
  • lv1

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo