Hej! jag får inte fram rätt värde när jag hämtar ett värde från en combobox som i sin tur hämtar från en ini-fil. Probably it is better to use interops for WinAPI functions for ini-files parsing, such as GetPrivateProfileSectionNames, GetPrivateProfileString, GetPrivateProfileSection etc? Skapa en klass som representerar en motor så blir det enklareFår inte fram rätt värde!!
så här ser min knapp ut som hämtar värdet (det här är främst som ett test):
Private Sub AktiveraAmnesplock1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AktiveraAmnesplock1.Click
Dim splitt As Array = Split(comboAmnesplockM1.SelectedText, "=")
MsgBox(splitt(0))
End Sub
min inifil ser ut såhär:
[Motorer_Amnesplock]
1=motor 1
2=motor 2
Precis som jag har nu vill jag visa "motor 1" i min textbox. Det fungerar. Men i min knapp vill jag hämta ut värdet "1" innan "=". just nu får jag inte ut någonting. alltså en tom ruta får jag bara.
så här ser koden ut som hämtar från ini:
objTxt1 = objFSO1.OpenTextFile("Handkorning_Amnesplock.ini")
If GoToSection(objTxt1, "[Motorer_Amnesplock]") Then
sLine1 = objTxt1.ReadLine
comboAmnesplockM1.Items.Clear()
comboAmnesplockM1.Items.Add("Ingen motor vald")
comboAmnesplockM1.SelectedIndex = 0
Do While Not objTxt1.AtEndOfStream And Not (VB.Left(sLine1, 1) = "[")
If sLine1 <> "" Then
System.Diagnostics.Debug.Write(sLine1)
Dim s As Array = Split(sLine1, "=")
comboAmnesplockM1.Items.Add(VB.Right(sLine1, Len(sLine1) - InStr(1, sLine1, "=", CompareMethod.Text)))
End If
sLine1 = objTxt1.ReadLine
Loop
End If
Private Function GoToSection(ByRef filename As Scripting.TextStream, ByVal ParamArray SecName() As Object) As Boolean
Dim i As Short
Dim Data As String
On Error GoTo errorHandler
GoToSection = False
Do While Not filename.AtEndOfStream
Data = filename.ReadLine
For i = 0 To UBound(SecName)
If InStr(1, Data, UCase(SecName(i)), CompareMethod.Text) = 1 Then
GoToSection = True
Exit Do
End If
Next i
Loop
Exit Function
errorHandler:
GoToSection = False
End Function
Sv: Får inte fram rätt värde!!
http://archive.devx.com/dotnet/discussions/040902/cominterop.asp
http://jachman.wordpress.com/2006/09/11/how-to-access-ini-files-in-c-net/Sv: Får inte fram rätt värde!!
Motorklass
<code>
Public Class Motor
'Har här valt att visa fälten som publica i detta exempel
'normalt bör man göma dem bakom properties.
Public Id As String
Public Beskrivning As String
'Konstruktor, kör när ny instans skapas
Sub New(ByVal motorId As String, ByVal motorBeskrivning As String)
Id = motorId
Beskrivning = motorBeskrivning
End Sub
'Detta är texten som bl.a. visas i ComboBoxen när en
'instans av klassen motor läggs till i boxen.
Public Overrides Function ToString() As String
ToString = Beskrivning
End Function
End Class
</code>
Ändring i din kod för att lägga till till ComboBoxen
<code>
Do While Not objTxt1.AtEndOfStream And Not (VB.Left(sLine1, 1) = "[")
If sLine1 <> "" Then
System.Diagnostics.Debug.Write(sLine1)
Dim s As Array = Split(sLine1, "=")
Dim motor as New Motor(s(0), s(1))
'Stoppa in det nya motorobjektet i ComboBoxen.
comboAmnesplockM1.Items.Add(motor)
</code>
När du sedan vill hämta ut dina värden:
<code>
Private Sub AktiveraAmnesplock1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AktiveraAmnesplock1.Click
Dim motor As Motor
Try
motor = comboAmnesplockM1.SelectedItem
'Du får enkelt ut nummer och beskrivning från motorobjektet
MessageBox.Show(String.Format("Id = {0}, Beskrivning = {1}", motor.Id, motor.Beskrivning))
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub</code>