2016-06-16 1 views
1

Was ich habe:Wie ListBox ausgewählter Artikel in Datei übergeben?

Private Sub ChooseProgram_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChooseProgram.SelectedIndexChanged 

Dim curItem As String = ChooseProgram.SelectedItem.ToString() 

End Sub 

Private Sub Install_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Install.Click 

Dim jhin As System.IO.StreamWriter 
jhin = My.Computer.FileSystem.OpenTextFileWriter("C:\Temp\jhin.bat", True) 

jhin.WriteLine("$program = " & curitem.string") 
jhin.Close() 
End Sub 

Ich möchte nur die Zeichenfolge in die Datei schreiben. Wie ist das möglich?

Danke für Ihre Hilfe! Hannir

UPDATE:

' Ensure an item is selected 
    If ChooseProgram.SelectedItem Is Not Nothing Then 
     curItem = ChooseProgram.SelectedItem.ToString() 
    End If 

Ich erhalte eine hier Fehler.

"Der Is-Operator akzeptiert keine Operanden vom Typ" integer ". Die Operanden müssen Referenztypen sein oder Typen zulassen, NULL-Werte."

Wirklich thx für Ihre schnelle Hilfe! @Pro Grammer

Wenn Sie einfach auf Installieren klicken, und nichts ausgewählt ist, endet es in einem Fehler. Also ist es möglich zu sagen "Sie müssen ein Element vor auswählen" oder die Schaltfläche Installieren ist nur anklickbar, wenn Sie ein Element ausgewählt haben?

Antwort

2

Für den Anfang müssen Sie die Deklaration der curItem Variable bewegen , was heißt Klassenstufe.

Wie es steht, ist Ihre Variable nur innerhalb Ihrer SelectedIndexChanged-Methode zugänglich, während Sie, wenn Sie es auf Klassenebene verschieben, auf alles innerhalb dieser Klasse zugreifen können (die Klasse in diesem Fall ist Ihr Formular). Sie ändern dann einfach die Variable von Ihrer SelectedIndexChanged Methode.

Dim curItem As String = "" 'We'll start with an empty string. 

Private Sub ChooseProgram_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChooseProgram.SelectedIndexChanged 

    curItem = ChooseProgram.SelectedItem.ToString() 

End Sub 

Jetzt können Sie auf die Variable von Ihrer Schaltfläche zugreifen und sie in eine Datei schreiben.

Das letzte, was Sie tun müssen, ist das Schließen der StreamWriter, die Sie erstellen, so dass es die Sperre für die Datei freigeben wird. Der einfachste und beste Weg, dies zu tun, ist es in einen Using/End Using Block zu wickeln.

Private Sub Install_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Install.Click 

    Using jhin As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter("C:\Temp\jhin.bat", True) 

     jhin.WriteLine("$program = " & curItem) 

    End Using 
End Sub 

EDIT:

Um Ihre Taste anklickbar nur dann, wenn ein Element ausgewählt ist, erste Enabled Eigenschaft auf False über das Eigenschaftenfenster im Designer der Schaltfläche gesetzt, dann in der diesen Code verwenden SelectedIndexChanged ereignis:

Install.Enabled = ChooseProgram.SelectedIndex >= 0 
If ChooseProgram.SelectedIndex < 0 Then Return 

curItem = ChooseProgram.SelectedItem.ToString() 
+0

Ja, es funktioniert. Was ist mit Pro Grammers Antwort? Kannst du mit diesem Fehler helfen? Es ist ein bisschen besser, denn wenn Sie einfach auf Installieren klicken und nichts ausgewählt ist, endet es mit einem Fehler. Also ist es möglich zu sagen "Sie müssen ein Element vor auswählen" oder die Schaltfläche Installieren ist nur anklickbar, wenn Sie ein Element ausgewählt haben? – hannir

+1

@hannir: Sie haben besser Pro Grammer darüber gefragt, und markieren Sie seine als die akzeptierte Antwort, wenn der Fehler behoben wird. Ich habe meine Antwort nur geschrieben, um dein anfängliches Problem zu beheben, während er erweitert und verbessert hat, um nach Problemen zu suchen. –

+0

Okay, danke für deine Hilfe :) Will do. – hannir

2

Dies ist eine Option:

Private Sub Install_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Install.Click 
    Dim curItem as String = "" 

    ' Ensure an item is selected 
    If ChooseProgram.SelectedItem IsNot Nothing 
     curItem = ChooseProgram.SelectedItem.ToString() 
    End If 

    ' Double checking valid input 
    If String.IsNullOrWhiteSpace(curItem) Then 
     ' Handle empty input - Display message, etc 
     ' Exit Sub (unless bat handles empty) 
    End If 

    Dim jhin As System.IO.StreamWriter 
    jhin = My.Computer.FileSystem.OpenTextFileWriter("C:\Temp\jhin.bat", True) 

    jhin.WriteLine("$program = " & curItem) 
    jhin.Close() 
End Sub 

Anstatt das ChooseProgram_SelectedIndexChanged Ereignis zu verwenden, können Sie mit ihm von hier beschäftigen, da Sie keine weiteren Aktionen in diesem Verfahren durchzuführen sind. Wenn Sie dieses Ereignis weiterhin verwenden möchten, weisen Sie den Zeichenfolgenwert einem Feld zu, auf das in der gesamten Klasse zugegriffen werden kann. aus dem SelectedIndexChanged Methode Check out Visual Vincent's answer für dieses Beispiel, und auch eines Using Block, der die Notwendigkeit beseitigt jhin.Close() manuell aufrufen und bietet auch ein viel klareres Format

+0

Ich postete meinen Fehler als eine neue Antwort hier. Thx for ur schnelle Hilfe :) – hannir

+1

Denken Sie daran, den StreamWriter zu schließen, wenn Sie damit fertig sind. –

+1

Aktualisiert, danke für Hinweis: –