如何使用其他模块中的表单对象执行操作?

时间:2017-12-30 19:04:28

标签: vb.net forms class scope

首先,为什么是表格类?

但现在谈到主要问题。

我有:

Form1.vb

Module1.vb

在表单上有一个文本框,进度条,标签等。

我希望能够从module1更改表单上这些对象的属性,但我似乎无法访问它们。

表格上的这些东西都是对象,对吗?那么他们有一定的范围吗?我该如何改变呢?

等等但是根据我的解决方案资源管理器,这些东西是类的属性吗?

enter image description here

但是当我运行程序时表单出现了吗?是否必须实例化表单类以便创建form1对象?

并不重要,但这是一个来自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

1 个答案:

答案 0 :(得分:2)

表单是类,因为它们是动态创建的。您可以多次实例化并打开相同的表单类,并同时打开实例。

VB自动实例化主窗体。

您可以通过Dim mainForm As Form1 mainForm = DirectCast(My.Application.OpenForms(0), Form1) mainForm.txtOutput.Text = "hello" 访问打开的表单。主要形式始终是第一个

Public

为了能够从外部访问表单的控件,必须将它们声明为InternalModifiers。您可以从属性窗口(Public Property OutputText() As String Get Return txtOutput.Text End Get Set(ByVal value As String) txtOutput.Text = value End Set End Property 属性)更改访问修饰符。

相反,您也可以在表单中声明一个属性,以便在

之外访问该文本
mainForm.OutputText = "hello"

现在你可以在模块中写这个

    Sub Copy_Cell() ' Copy_Cell Macro

Dim i as Integer
For i = 1 To 337
    Sheets("Sheet A").Activate
    ActiveSheet.Cells(i + 1, 1).Select
    Selection.Copy
    Sheets("Sheet B").Activate
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
Next i
    End Sub Image Image