ThomasRones
ThomasRones

Reputation: 683

How do I do stuff with my form objects from another module?

First of all, Why are forms classes?

But now on to the main question.

I have:

Form1.vb

Module1.vb

On the form there is a textbox, progress bar, labels etc.

I want to be able to change the properties of these objects on my form from module1, but I cant seem to access them.

These things on the form are objects, right? So do they have a certain scope? and how can I change it?

Wait but according to my solution explorer, these things are properties of a class??

enter image description here

But the form shows up when I run the program?? Wouldn't the form class have to be instantiated so that the form1 object is created?

Not that it matters, but here is a snippet from module1

Sub WriteObjectsToCSV()
    Dim props As PropertyInfo() = MyCompanies(1).GetType().GetProperties()
    Dim sw As StreamWriter = 
    My.Computer.FileSystem.OpenTextFileWriter(SaveAs, False)
    Dim csv As New CsvHelper.CsvWriter(sw)

    csv.WriteHeader(Of Company)()
    csv.NextRecord()

    For Each company In MyCompanies

        '>>> want to write to my text box and change my progress bar here <<<

        For Each prop In props
            csv.WriteField(prop.GetValue(company))
        Next
        csv.NextRecord()
    Next
End Sub

Upvotes: 0

Views: 440

Answers (1)

Olivier Jacot-Descombes
Olivier Jacot-Descombes

Reputation: 112342

Forms are classes because they are created dynamically. You can instantiate and open the same form class serveral times and leave the instances open at the same time.

VB automatically instantiates the main form.

You can access the open forms through My.Application.OpenForms. The main form is always the first

Dim mainForm As Form1

mainForm = DirectCast(My.Application.OpenForms(0), Form1)
mainForm.txtOutput.Text = "hello"

To be able to access the controls of the form from outside, they must be declared Public or Internal. You can change the access modifier from the properties window (Modifiers property).

Instead, you can also declare a property in the form to make the text accessible outside

Public Property OutputText() As String
    Get
        Return txtOutput.Text
    End Get
    Set(ByVal value As String)
        txtOutput.Text = value
    End Set
End Property

Now you can write this in the module

mainForm.OutputText = "hello"

Upvotes: 2

Related Questions