2016-05-22 9 views
0

Ich möchte die Informationen einiger Spiele in einem Listenfeld nach dem Öffnen einer Datei und der Analyse ihres Inhalts anzeigen. Ich habe mein Projekt im Grunde abgeschlossen, aber ich kann es anscheinend nicht ganz zum Laufen bringen. Ich möchte die Informationen für jedes Spiel ändern, wenn sich der Index der Titelliste der Titel ändert. Mein Problem ist, dass ich versuche, eine Struktur zu verwenden, um ein Array und einige andere Daten darin zu speichern, aber wenn das nächste Ereignis eintritt (der Index ändert sich), wird die Struktur leer und ich bin mir nicht sicher, wie ich ein (Ich denke, es nennt Instanz) zu meiner neuen Funktion oder wenn es sogar einen besseren Weg gibt, dies zu tun. Hier ist mein Code: http://pastebin.com/i0Ga3fcD Jede Hilfe würde sehr geschätzt werden, wenn Sie weitere Informationen benötigen, werde ich mein Bestes versuchen, um Ihnen in irgendeiner Weise zu helfen."Passing" eine Struktur in VB.NET

Mein Code-Schnipsel:

Sub populateListboxWithInfo(ByRef strValidGames) 
     Dim intCount As Integer = 0 
     Dim intLengthOfArray As Integer = strValidGames.Length 

     Do While intCount < intLengthOfArray - 1 
      Dim strArraySplit() As String = strValidGames(intCount).Split(New Char() {","c}) 
      lstInformation.Items.Add("Rating: " & strArraySplit(2)) 
      lstInformation.Items.Add("Quantity: " & strArraySplit(4)) 
      lstInformation.Items.Add("Price (per item): " & strArraySplit(5)) 
     Loop 
    End Sub  

Function getValidGames(ByRef gameInfo) 
     Dim intLenghtOfArray As Integer 
     Dim intCount As Integer = 0 
     Dim strArrayValidGames() As String 
     Dim intArrayStore As Integer 

     intLenghtOfArray = gameInfo.strGameInfo.Length 
     Do While intCount < intLenghtOfArray - 2 
      Dim strArraySplit() As String = gameInfo.strGameInfo(intCount).Split(New Char() {","c}) 

      If strArraySplit(3) = gameInfo.CharType Then 
       If strArraySplit(1) = gameInfo.strPlatform Then 
        ReDim Preserve strArrayValidGames(intArrayStore) 
        strArrayValidGames(intArrayStore) = gameInfo.strGameInfo(intCount) 
        intArrayStore += 1 
       End If 
      End If 
      intCount += 1 
     Loop 

     Return strArrayValidGames 
    End Function 
+2

Willkommen bei Stack Overflow. Bitte fügen Sie einen [mcve] in Ihren Beitrag ein - nicht Ihren gesamten Code, gerade genug, um ein vollständiges Beispiel für das Problem zu sein ... und nicht in pastebin, sondern * in der Frage. –

+0

Danke dafür. Ich habe versucht, so kurz wie möglich zu sein, aber ich bin mir nicht sicher, was genau ich hineinlegen sollte. Ich hoffe, das ist genug. – Kirill

+0

Nein, das ist kein komplettes Programm. Im Grunde sollte es genug Code zum Kopieren, Einfügen, Kompilieren und Ausführen geben - aber es sollte * nichts * darin sein, was nicht benötigt wird, um das Problem zu demonstrieren. Bitte lesen Sie https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ und https://codeblog.jonskeet.uk/2012/11/24/stack-overflow-question-checklist/ –

Antwort

0

Your Game Einheit sollte eine Klasse sein - eine Struktur mehr auf kleine Dinge orientiert ist (bis zu 16 Bytes oder so, IIRC). Es gibt normalerweise keine Notwendigkeit, Hungarian notation-style-Namen zu verwenden (natürlich, wenn Sie sagen, ein Label, ein Textfeld und eine Variable, die dasselbe betreffen, dann ist eine minimale Verwendung der ungarischen Notation wahrscheinlich nützlich).

Public Class Game 
    Property Platform As String 
    Property Title As String 
    Property Game As String 
    Property Price As Decimal 
    Property Rating As Char 
    Property Type As Char 
    Property GameInfo As String() 
End Class 

Wenn Sie eine Funktion deklarieren, müssen Sie die Typen der Parameter deklarieren und die Art es gibt so dass der Compiler sicher Variablentypen Spiel machen kann.

Es ist üblich, eine For Schleife für eine einfache Schleife zu verwenden, anstatt eine While Schleife, und es ist üblich, Variablen wie i zu verwenden, j und k für die Schleifenvariable.

Wenn Sie sich selbst mit Redim finden, ist es an der Zeit, eine List zu verwenden, die automatisch ihre Größe anpasst, wenn Sie neue Objekte hinzufügen.

Also, Ihre GetValidGames Funktion könnte aussehen wie:

Function GetValidGames(gameInfo As Game) As String() 
    Dim validGames As New List(Of String) 

    For i As Integer = 0 To gameInfo.GameInfo.Length - 2 
     Dim parts() As String = gameInfo.GameInfo(i).Split(",".ToCharArray()) 

     If parts(3) = gameInfo.Type Then 
      If parts(1) = gameInfo.Platform Then 
       validGames.Add(gameInfo.GameInfo(i)) 
      End If 
     End If 

    Next 

    Return validGames.ToArray() 

End Function 

Sie den Code nicht zeigen, hat das tatsächlich ein Problem geben; Sie benötigen etwas wie:

Private Sub lstGames_SelectedIndexChanged(sender As Object, e As EventArgs) 
    Dim gameName As String = lstGames.SelectedItem.ToString() 
    ' show appropriate data 
+0

Vielen Dank für Ihre Antwort. Ich benutze die ungarische Notation, weil wir für meinen Kurs ziemlich gezwungen sind, da es die "Namenskonvention" ist, der gefolgt werden MUSS. Auch haben wir nichts über die Kurse gelernt, weil der Kurs, den ich mache, ziemlich schrecklich ist, aber ich habe ein wenig über Klassen und Objekte in einem anderen Kurs gelernt, der Python lehrt. Ich habe einen anderen Weg gefunden, um mein Problem zu lösen, indem ich eine globale Variable und einen anderen Sub-Par-Code benutze und es tun muss, weil es nur noch 2 Wochen des Kurses gibt und ich mit VB haha ​​fertig bin. – Kirill

Verwandte Themen