vb.net 教程 4-12 ini文件操作 3 应用
发布时间:2020-12-16 23:53:45 所属栏目:大数据 来源:网络整理
导读:接前面两小节,看看ini文件的实际运用: 设计界面: 目的是实现界面根据用户需要显示不同的语言。需要制作两个ini文件: language_ch.ini:存放中文内容。具体内容如下: [gui] appname=这是我的程序 language=选择语言 Save=保存 Open=打开 Exit=退出 langu
接前面两小节,看看ini文件的实际运用:
设计界面: 目的是实现界面根据用户需要显示不同的语言。需要制作两个ini文件:
language_ch.ini:存放中文内容。具体内容如下:
[gui]
appname=这是我的程序 language=选择语言 Save=保存 Open=打开 Exit=退出 language_en.ini:存放英文内容。具体内容如下: [gui] appname=This is my App language=Choose Language Save=Save Open=Open Exit=Exit 两个ini文件相比较,节名称相同,键名称相同,键值不同。 新建工程后添加一个模块,主要放置要调用的api函数声明,由于本节教程只有一个窗体,也可以将api函数的声明放在窗体中。内容如下: Module Module1 Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( ByVal lpApplicationName As String,ByVal lpKeyName As String,ByVal lpDefault As String,ByVal lpReturnedString As String,ByVal nSize As Integer,ByVal lpFileName As String) As Integer Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( ByVal lpApplicationName As String,ByVal lpString As String,ByVal lpFileName As String) As Integer End Module根据选择的语言,载入相应的ini文件: Private Sub rbChinese_CheckedChanged(sender As Object,e As EventArgs) Handles rbChinese.CheckedChanged,rbEnglish.CheckedChanged If rbChinese.Checked = True Then getGuiLanguage("d:language_ch.ini") Else getGuiLanguage("d:language_en.ini") End If End Sub实际载入ini内容的方法: Private Sub getGuiLanguage(ByVal filename As String) lblAppName.Text = getKeyValue("gui","appname",filename) gbChooseLanguage.Text = getKeyValue("gui","language",filename) btnSave.Text = getKeyValue("gui","Save",filename) btnOpen.Text = getKeyValue("gui","Open",filename) btnExit.Text = getKeyValue("gui","Exit",filename) End Sub 读取ini文件键值:
Private Function getKeyValue(ByVal sectionName As String,ByVal keyName As String,ByVal filename As String) As String Dim Rvalue As Integer Dim BufferSize As Integer BufferSize = 255 Dim keyValue As String keyValue = Space(BufferSize) Rvalue = GetPrivateProfileString(sectionName,keyName,"",keyValue,BufferSize,filename) If Rvalue = 0 Then keyValue = "(没有获得相应的值)" Else keyValue = keyValue.Substring(0,Rvalue) End If Return keyValue End Function
当窗口载入时,默认载入中文:
Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load getGuiLanguage("d:language_ch.ini") End Sub
所有的代码都写完了。
但是,以上代码实际是存在问题的。
在 getKeyValue()方法 keyValue = keyValue.Substring(0,Rvalue)一句设置断点进行调试会发现,使用substring方法返回来的数据并不正确:调用GetPrivateProfileString获得的数据:
获得数据的长度:
使用substring截取后的内容:
根据GetPrivateProfileString返回的内容,可以看出只需要获得vbNullChar,实际就是chr(0)之前的内容就可以了:
'===== 截断chr0 Private Function GetIniValue(ByVal msg As String) As String Dim PosChr0 As Integer PosChr0 = msg.IndexOf(Chr(0)) If PosChr0 <> -1 Then msg = msg.Substring(0,PosChr0) GetIniValue = msg End Function
keyValue = keyValue.Substring(0,Rvalue)
替换为:
keyValue = GetIniValue(keyValue)
最后看看运行情况:
最后再次吐槽一下csdn新的文章编辑器。实在是难用,没有之前的那个好用。
当编辑到这一句时候,居然导致了我的edge浏览器没有响应,幸好自动保存功能有作用,保存到了草稿,不然就得重头再来。
由于.net平台下C#和vb
.NET很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看vb.net 教程 目录 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |