首先,为什么是表格类?
但现在谈到主要问题。
我有:
Form1.vb
Module1.vb
在表单上有一个文本框,进度条,标签等。
我希望能够从module1更改表单上这些对象的属性,但我似乎无法访问它们。
表格上的这些东西都是对象,对吗?那么他们有一定的范围吗?我该如何改变呢?
等等但是根据我的解决方案资源管理器,这些东西是类的属性吗?
但是当我运行程序时表单出现了吗?是否必须实例化表单类以便创建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
答案 0 :(得分:2)
表单是类,因为它们是动态创建的。您可以多次实例化并打开相同的表单类,并同时打开实例。
VB自动实例化主窗体。
您可以通过Dim mainForm As Form1
mainForm = DirectCast(My.Application.OpenForms(0), Form1)
mainForm.txtOutput.Text = "hello"
访问打开的表单。主要形式始终是第一个
Public
为了能够从外部访问表单的控件,必须将它们声明为Internal
或Modifiers
。您可以从属性窗口(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