微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vb.net 教程 4-12 ini文件操作 3 应用

接前面两小节,看看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 教程 目录

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐