Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Visual Basic
  4. VB6 code works like a treat but need it in vb.net grrr

VB6 code works like a treat but need it in vb.net grrr

Scheduled Pinned Locked Moved Visual Basic
csharphelp
14 Posts 4 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • W Wayne Gaylard

    From what I can gather, basically what you are trying to do is to read a list of players and their high scores from a text file, and populate arrays named names and scores. In .Net you need to import System.IO and use a StreamReader to read from the file. An important consideration obviously, is the set up of the original text file. i.e - is it a comma delimted file ?, is each record on a new line ? etc. I threw this together, working on a few assumptions. 1. The text file is stored in the same folder as the application executable. 2. The text file consists of a new line for each player, and each player property is separated by a comma.

        names = New List(Of String)
        scores = New List(Of Integer)
        Dim strFilename As String = Application.StartupPath & "\\highscores.txt"
        Dim srScores As New StreamReader(strFilename)
        While Not srScores.EndOfStream
            Dim strRead As String = srSave.ReadLine
            ListBox1.Items.Add(strRead)
            Dim strSplit() As String = Split(strRead, ",")
            names.Add(strSplit(0))
            scores.Add(strSplit(1))
        End While
        srScores.Close()
    

    I also assumed names and scores were lists rather than arrays. You would obviously need to consider error handling as a major issue which I have completely ignored. Hope this helps.

    O Offline
    O Offline
    offroaderdan
    wrote on last edited by
    #5

    Cheers Zimvbcoder. This is indeed very helpful :D However i have a few questions

    names = New List(Of String) ' vb doesn't like the new list of string?
    scores = New List(Of Integer)
    Dim strFilename As String = Application.StartupPath & "\highscores.txt"
    Dim srScores As New StreamReader(strFilename)
    While Not srScores.EndOfStream
    Dim strRead As String = srSave.ReadLine
    ListBox1.Items.Add(strRead)
    Dim strSplit() As String = Split(strRead, ",")
    names.Add(strSplit(0)) ' doesnt like names.add?
    scores.Add(strSplit(1))
    End While
    srScores.Close()

    Also srSave isn't doing anything? I am very grateful for you replying to my post. Many thanks Dan

    T W 2 Replies Last reply
    0
    • O offroaderdan

      Cheers Zimvbcoder. This is indeed very helpful :D However i have a few questions

      names = New List(Of String) ' vb doesn't like the new list of string?
      scores = New List(Of Integer)
      Dim strFilename As String = Application.StartupPath & "\highscores.txt"
      Dim srScores As New StreamReader(strFilename)
      While Not srScores.EndOfStream
      Dim strRead As String = srSave.ReadLine
      ListBox1.Items.Add(strRead)
      Dim strSplit() As String = Split(strRead, ",")
      names.Add(strSplit(0)) ' doesnt like names.add?
      scores.Add(strSplit(1))
      End While
      srScores.Close()

      Also srSave isn't doing anything? I am very grateful for you replying to my post. Many thanks Dan

      T Offline
      T Offline
      The Man from U N C L E
      wrote on last edited by
      #6

      For List(Of ) you need to import System.Collections.Generic. As for srSave, I think you made a typo. It should be. Dim strRead As String = srScores.ReadLine()

      If you have knowledge, let others light their candles at it. Margaret Fuller (1810 - 1850) [My Articles]  [My Website]

      O 1 Reply Last reply
      0
      • O offroaderdan

        Cheers Zimvbcoder. This is indeed very helpful :D However i have a few questions

        names = New List(Of String) ' vb doesn't like the new list of string?
        scores = New List(Of Integer)
        Dim strFilename As String = Application.StartupPath & "\highscores.txt"
        Dim srScores As New StreamReader(strFilename)
        While Not srScores.EndOfStream
        Dim strRead As String = srSave.ReadLine
        ListBox1.Items.Add(strRead)
        Dim strSplit() As String = Split(strRead, ",")
        names.Add(strSplit(0)) ' doesnt like names.add?
        scores.Add(strSplit(1))
        End While
        srScores.Close()

        Also srSave isn't doing anything? I am very grateful for you replying to my post. Many thanks Dan

        W Offline
        W Offline
        Wayne Gaylard
        wrote on last edited by
        #7

        I assumed that the list of names and the list of scores would be previously declared. To be honest with you I would create a class Player in my app, and in that class you could have a function GetAllPlayers which would look like this :

        Imports System.IO

        Public Class Player
        Implements IComparable
        
        Private strName As String
        Private intHighScore As Integer
        
        Public Property Name() As String
            Get
                Return strName
            End Get
            Set(ByVal value As String)
                strName = value
            End Set
        End Property
        
        Public Property HighScore() As Integer
            Get
                Return intHighScore
            End Get
            Set(ByVal value As Integer)
                intHighScore = value
            End Set
        End Property
        
        Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
        
            Dim OtherPlayer As Player = CType(obj, Player)
            Return Me.HighScore - OtherPlayer.HighScore
        
        End Function
        
        Shared Function GetAllPlayers(ByVal FileName As String) As List(Of Player)
        
            Dim lstPlayers As New List(Of Player)
            Dim strFilename As String = FileName
            Using srScores As New StreamReader(strFilename)
                While Not srScores.EndOfStream
                    Dim newPlayer As New Player
                    Dim strRead As String = srScores.ReadLine
                    Dim strPlayerProperties() As String = Split(strRead, ",")
                    newPlayer.Name = strPlayerProperties(0)
                    newPlayer.HighScore = strPlayerProperties(1)
                    lstPlayers.Add(newPlayer)
                End While
            End Using
            Return lstPlayers
        
        End Function
        

        End Class

        Then you can declare a list(Of Player) in your main form and populate it like this :

        Private Sub Form1\_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
           Try
                lstPlayers = Player.GetAllPlayers(My.Settings.HighScoresFile)
                lstPlayers.Sort()
                For i As Integer = 0 To lstPlayers.Count - 1
                    ListBox1.Items.Add(lstPlayers(i).Name & ", " & lstPlayers(i).HighScore)
                Next
            Catch ex As System.IO.IOException
                MsgBox("There was an error retrieving High Scores.")
            End Try
        
        End Sub
        

        This is very simple but a good way to start thinking in a more structured way.

        O 1 Reply Last reply
        0
        • T The Man from U N C L E

          For List(Of ) you need to import System.Collections.Generic. As for srSave, I think you made a typo. It should be. Dim strRead As String = srScores.ReadLine()

          If you have knowledge, let others light their candles at it. Margaret Fuller (1810 - 1850) [My Articles]  [My Website]

          O Offline
          O Offline
          offroaderdan
          wrote on last edited by
          #8

          Thanks the man from U.N.C.L.E so are you saying that the following code would become name = New list(of system.collection.generic) ? This comes up saying do i want to change what i have written to system.collection.IEnumerable system.collection.IEnumerator system.collection.Generic.list(ofT) system.collection.queue system.collection.generic.IList(ofT) Many thanks Dan

          T 1 Reply Last reply
          0
          • W Wayne Gaylard

            I assumed that the list of names and the list of scores would be previously declared. To be honest with you I would create a class Player in my app, and in that class you could have a function GetAllPlayers which would look like this :

            Imports System.IO

            Public Class Player
            Implements IComparable
            
            Private strName As String
            Private intHighScore As Integer
            
            Public Property Name() As String
                Get
                    Return strName
                End Get
                Set(ByVal value As String)
                    strName = value
                End Set
            End Property
            
            Public Property HighScore() As Integer
                Get
                    Return intHighScore
                End Get
                Set(ByVal value As Integer)
                    intHighScore = value
                End Set
            End Property
            
            Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo
            
                Dim OtherPlayer As Player = CType(obj, Player)
                Return Me.HighScore - OtherPlayer.HighScore
            
            End Function
            
            Shared Function GetAllPlayers(ByVal FileName As String) As List(Of Player)
            
                Dim lstPlayers As New List(Of Player)
                Dim strFilename As String = FileName
                Using srScores As New StreamReader(strFilename)
                    While Not srScores.EndOfStream
                        Dim newPlayer As New Player
                        Dim strRead As String = srScores.ReadLine
                        Dim strPlayerProperties() As String = Split(strRead, ",")
                        newPlayer.Name = strPlayerProperties(0)
                        newPlayer.HighScore = strPlayerProperties(1)
                        lstPlayers.Add(newPlayer)
                    End While
                End Using
                Return lstPlayers
            
            End Function
            

            End Class

            Then you can declare a list(Of Player) in your main form and populate it like this :

            Private Sub Form1\_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            
               Try
                    lstPlayers = Player.GetAllPlayers(My.Settings.HighScoresFile)
                    lstPlayers.Sort()
                    For i As Integer = 0 To lstPlayers.Count - 1
                        ListBox1.Items.Add(lstPlayers(i).Name & ", " & lstPlayers(i).HighScore)
                    Next
                Catch ex As System.IO.IOException
                    MsgBox("There was an error retrieving High Scores.")
                End Try
            
            End Sub
            

            This is very simple but a good way to start thinking in a more structured way.

            O Offline
            O Offline
            offroaderdan
            wrote on last edited by
            #9

            This LOOKS pretty awsome :D I have one error and i don't actually know why.

            lstPlayers = Player.GetAllPlayers(My.Settings.HighScoresFile)

            VB doesn't like .High Scores File. This is probably something stupid whch i've done but i can't work out why that doesn't like it? Thanks again Dan

            W 1 Reply Last reply
            0
            • O offroaderdan

              Thanks the man from U.N.C.L.E so are you saying that the following code would become name = New list(of system.collection.generic) ? This comes up saying do i want to change what i have written to system.collection.IEnumerable system.collection.IEnumerator system.collection.Generic.list(ofT) system.collection.queue system.collection.generic.IList(ofT) Many thanks Dan

              T Offline
              T Offline
              The Man from U N C L E
              wrote on last edited by
              #10

              Other way round:

              New System.Collections.Generic.List(Of String)

              If you have knowledge, let others light their candles at it. Margaret Fuller (1810 - 1850) [My Articles]  [My Website]

              O 1 Reply Last reply
              0
              • T The Man from U N C L E

                Other way round:

                New System.Collections.Generic.List(Of String)

                If you have knowledge, let others light their candles at it. Margaret Fuller (1810 - 1850) [My Articles]  [My Website]

                O Offline
                O Offline
                offroaderdan
                wrote on last edited by
                #11

                Sorry, I just tried that, so the code is

                names = New System.Collections.Generic.List(Of String)

                but it comes up with an error as well as a blue squigly underneath saying it cannot be converted to '1 dimensional array of string?? I thank you for your patience Dan

                T 1 Reply Last reply
                0
                • O offroaderdan

                  Sorry, I just tried that, so the code is

                  names = New System.Collections.Generic.List(Of String)

                  but it comes up with an error as well as a blue squigly underneath saying it cannot be converted to '1 dimensional array of string?? I thank you for your patience Dan

                  T Offline
                  T Offline
                  The Man from U N C L E
                  wrote on last edited by
                  #12

                  No worries. Sounds like you have left the declaration of your variable as Dim names as string(). You need to change that to a List(Of as well. E.g.

                  Dim names = System.Collections.Generic.List(Of String)
                  names = New System.Collections.Generic.List(Of String)()

                  Or

                  If you have knowledge, let others light their candles at it.
                  Margaret Fuller (1810 - 1850)
                  [My Articles]  [My Website]

                  O 1 Reply Last reply
                  0
                  • T The Man from U N C L E

                    No worries. Sounds like you have left the declaration of your variable as Dim names as string(). You need to change that to a List(Of as well. E.g.

                    Dim names = System.Collections.Generic.List(Of String)
                    names = New System.Collections.Generic.List(Of String)()

                    Or

                    If you have knowledge, let others light their candles at it.
                    Margaret Fuller (1810 - 1850)
                    [My Articles]  [My Website]

                    O Offline
                    O Offline
                    offroaderdan
                    wrote on last edited by
                    #13

                    Thanks a lot I have decided to show the code that i am using from start to fininsh. I am using 1 button called comtest 2 list boxes called listBox1 and ListBox2 2 textboxes called text1 and text2

                    Imports System.IO

                    Public Class Form1
                    Dim scores = New System.Collections.Generic.List(Of String)
                    Dim names = New System.Collections.Generic.List(Of String)
                    Dim test1(0 To 10) As String
                    Dim test2(0 To 10) As Integer
                    Dim userscore As Integer
                    Dim username As String
                    Dim a As Integer
                    Dim b As Integer
                    Dim i As Integer
                    Dim strFilename As String = ("High Scores.txt")

                    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

                        Call highscore()
                        names = New System.Collections.Generic.List(Of String)
                        scores = New System.Collections.Generic.List(Of Integer)
                        Dim srScores As New IO.StreamReader(strFilename)
                        While Not srScores.EndOfStream
                            Dim strRead As String = srScores.ReadLine
                            ListBox1.Items.Add(strRead)
                            Dim strSplit() As String = Split(strRead, ",")
                            names.Add(strSplit(0))
                            scores.Add(strSplit(1))
                        End While
                        srScores.Close()
                    
                    
                    End Sub
                    

                    Private Sub comtest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comtest.Click
                    username = Text1.Text
                    userscore = Val(Text2.Text)
                    For i = 1 To 10
                    a = scores(i)
                    If userscore >= a Then
                    test1(i) = username
                    test2(i) = userscore
                    For b = i + 1 To 10
                    test1(b) = names(b - 1)
                    test2(b) = scores(b - 1)
                    Next
                    Call newscore()
                    Exit Sub
                    End If
                    test1(i) = names(i)
                    test2(i) = scores(i)
                    Next
                    End Sub
                    Private Sub highscore()
                    For i = 1 To 10
                    ListBox1.Items.Add(names(i))
                    List2.Items.Add(scores(i))
                    Next
                    End Sub
                    Private Sub newscore() ' write
                    ListBox1.ClearSelected()
                    List2.ClearSelected()
                    For i = 1 To 10
                    ListBox1.Items.Add(test1(i))
                    List2.Items.Add(test2(i))
                    names(i) = test1(i)
                    scores(i) = test2(i)
                    Next
                    Dim objWriter As New System.IO.StreamWriter(highScoresFile)

                    For i = 1 To 10
                        objWriter.Write(names(i) & "," & scores(i))
                    
                    Next
                    objWriter.Close()
                    

                    End Sub

                    This is the VB6 version with the same properties

                    Dim scores(1 To 10) As

                    1 Reply Last reply
                    0
                    • O offroaderdan

                      This LOOKS pretty awsome :D I have one error and i don't actually know why.

                      lstPlayers = Player.GetAllPlayers(My.Settings.HighScoresFile)

                      VB doesn't like .High Scores File. This is probably something stupid whch i've done but i can't work out why that doesn't like it? Thanks again Dan

                      W Offline
                      W Offline
                      Wayne Gaylard
                      wrote on last edited by
                      #14

                      Hi there. Sorry it is my fault, I forgot to mention that where ever possible it is not a good idea to hardcode things like Filenames, Connectionstrings, etc into your app. The best way to do this is to use your Application.Settings file which is automatically generated for you by VS. To access the settings file, right click on your project in Solution Explorer, select properties and a form should open up with various tabs to set up options for your app. Select Settings tab and there you can store application specific settings such as file names and connection strings. To set up HighScoresFile, type the name HighScoresFile under name, under type select string, under scope select application, and under value put the full address of the file. To access any of your settings then from your app you call My.Settings.'insert setting name here'. When considering where to put the file, you need to take into account where you will deploy the application and where the High Scores file will actually be kept when the app has been deployed on other machines. Hope this helps.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups