I have built a basic VB app in the latest visual studio community. It's a simple app to load a text file into a list box then allow the list to be filtered down and finally the selected value to be copied.
It all works fine but I am curious, if I want to distribute this to other users I need to send them the text file (and the location is currently hard coded).
There has to be a better way to do this, do I need to import the text file as some sort of object in my project so it is then part of the project as opposed to a text file on its own?
Here is my code:
Public Class Form1
    Dim MyArray() As String = My.Computer.FileSystem.ReadAllText("C:\Temp\Products.txt").Split(Environment.NewLine)
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ListBox1.DataSource = MyArray
    End Sub
    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        TextBox2.Text = ListBox1.SelectedValue
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Clipboard.Clear()
        Clipboard.SetText(TextBox2.Text)
    End Sub
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Dim FilteredArray(0) As String
        Dim ProdName As String
        Dim X As Long = 0
        ListBox1.DataSource = MyArray
        For Each ProdName In ListBox1.Items
            If InStr(UCase(ProdName), UCase(TextBox1.Text)) > 0 Then
                ReDim Preserve FilteredArray(X)
                FilteredArray(X) = ProdName
                X = X + 1
            End If
        Next
        ListBox1.DataSource = FilteredArray
    End Sub
End Class
Any help is appreciated.
For completeness, here is my final solution:
Imports System.IO
Imports System.Reflection
Public Class Form1
    Dim MyArray() As String
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Using sr As StreamReader = New StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication2.Products.txt"))
            MyArray = Split(sr.ReadToEnd(), vbLf)
        End Using
        ListBox1.DataSource = MyArray
    End Sub
    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        TextBox2.Text = ListBox1.SelectedValue
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Clipboard.Clear()
        Clipboard.SetText(TextBox2.Text)
    End Sub
    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Dim FilteredArray(0) As String
        Dim ProdName As String
        Dim X As Long = 0
        ListBox1.DataSource = MyArray
        For Each ProdName In ListBox1.Items
            If InStr(UCase(ProdName), UCase(TextBox1.Text)) > 0 Then
                ReDim Preserve FilteredArray(X)
                FilteredArray(X) = ProdName
                X = X + 1
            End If
        Next
        ListBox1.DataSource = FilteredArray
    End Sub
End Class
 
     
    