Får inte fram rätt värde!!
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.
så här ser min knapp ut som hämtar värdet (det här är främst som ett test):
1 2 3 4 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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 |
Svara
Sv: Får inte fram rätt värde!!
Probably it is better to use interops for WinAPI functions for ini-files parsing, such as GetPrivateProfileSectionNames, GetPrivateProfileString, GetPrivateProfileSection etc?
http://archive.devx.com/dotnet/discussions/040902/cominterop.asp
http://jachman.wordpress.com/2006/09/11/how-to-access-ini-files-in-c-net/
Svara
Sv: Får inte fram rätt värde!!
Skapa en klass som representerar en motor så blir det enklare
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>
Svara