50分求一段代码,关于savesetting和getsetting的
小弟的窗体上有一个按钮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




