2013-11-16 4 views
0

Я создаю программу на VB.net, которая открывает файл .INI и считывает содержимое. Я написал следующий код:Открыть файл INI и поместить его в разные текстовые поля

Private Sub OpenINIButton_Click(sender As Object, e As EventArgs) Handles OpenINIButton.Click 
    Dim OpenDLG As New OpenFileDialog 
    Dim FileLocation = OpenDLG.FileName.ToString() 

    OpenDLG.Filter = "INI File (*.ini)|*.ini" 
    OpenDLG.Title = "Open INI File" 
    OpenDLG.InitialDirectory = "C:\" 
    OpenDLG.RestoreDirectory = True 

    DialogResult = OpenDLG.ShowDialog 

    If DialogResult = Windows.Forms.DialogResult.OK Then 

     TextBox1.Text = ReadIni(FileLocation, INIkey, INIvalue, "") 

    ElseIf DialogResult = Windows.Forms.DialogResult.Cancel Then 

    End If 

End Sub 

диалог открыть файл открывается, и я могу открыть файл INI, но значение INIkey не помещается в TextBox1.

Любая идея, как я могу это исправить?

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

1

Лучший способ сделать это было бы сделать iniParse модуль, как показано ниже, и просто использовать функцию, как показано ниже:

Module iniParse 
Public readwrtie As Integer 
Public settingValueReturn As New System.Text.StringBuilder(255) 

Private Declare Auto Function WritePrivateProfileString Lib "Kernel32" _ 
(ByVal IpApplication As String, ByVal Ipkeyname As String, _ 
ByVal IpString As String, ByVal IpFileName As String) As Integer 

Private Declare Auto Function GetPrivateProfileString Lib "Kernel32" _ 
(ByVal IpApplicationName As String, ByVal IpKeyName As String, _ 
ByVal IpDefault As String, ByVal IPReturnedString As System.Text.StringBuilder, _ 
ByVal nsize As Integer, ByVal IpFileName As String) As Integer 

Public Sub WriteINIFile(heading As String, setting As String, settingvalue As String, path As String) 
    WritePrivateProfileString(heading, setting, settingvalue, path) 
End Sub 

Public Sub ReadIniFile(heading As String, setting As String, path As String) 
    GetPrivateProfileString(heading, setting, "", settingValueReturn, 100, path) 
End Sub 

End Module 

Пример:

Button1_click blah blah blah handles button1.click... 
    ReadIniFile("MAIN", "test", "C:\config.ini") 
'this would read the following ini file: 
'[MAIN] 
'test=hi 
'to get that 'hi' value you would use this code: 
textbox1.text = settingReturnValue.tostring '(settingValueReturn Will always be the value of the setting entered in the function args) 

'to write ini file: 
Button1_click blah blah blah handles button1.click... 
WriteIniFile("MAIN", "test2", "hi2", "C:\config.ini") 
'this would write the following to the ini @ C:\config.ini file: 
'[MAIN] 
'test2=hi2 

Я надеюсь, что это помогает вашим потребностям!

2

Вы инициализировать path beore пользователь выбрал его:

Dim FileLocation = OpenDLG.FileName.ToString() 

ли, что после того, как ShowDialog, так вот правильное место:

If DialogResult = Windows.Forms.DialogResult.OK Then 
    Dim FileLocation = OpenDLG.FileName.ToString() 
    TextBox1.Text = ReadIni(FileLocation, INIkey, INIvalue, "") 
ElseIf DialogResult = Windows.Forms.DialogResult.Cancel Then 

End If 

Но почему вы не заметили исключение ? Я предполагаю, что у вас есть пустой блок catch, где вы пытаетесь открыть файл в ReadIni. В любом случае это плохая привычка. Обратите внимание, что переменная FileLocation в вашем коде ссылается на StringOpenDLG.FileName в то время, когда вы ее назначили, нет постоянного соединения между ними. Поэтому, если он изменится позже, переменная ссылается на старую строку.

+0

Привет, Тим, Спасибо, что сработало! Можно ли также установить FileLocation как общедоступную переменную, чтобы я мог использовать ее в Ohter Sub? Я хотел бы создать кнопку Save, которая записывает измененные INI-значения в INI-файл. – RalJans

Смежные вопросы