自从我完成了任何视觉基本工作以来已经有一段时间了。这个问题使我在一天中最好的部分中度过了困难。我记得VB.NET过去要容易得多...
我遇到的问题是我需要一个模块来更改/添加form1上的对象。为了这个已发布的问题,我将使用模块内的函数使用"添加"项目。
代码的简单示例:
form1
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
'startup stuff
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MyFuction1()
End Sub
End Class
模块1
Module Module1
Public Function MyFunction1()
Form1.ComboBox1.Items.Add("Test")
End Function
End Module
这样做时,我会收到错误:
reference to non-shared member requires object reference.
我在没有骰子的模块1中尝试了以下内容。
Dim Frm1 As Form1
Frm1 = New Form1
Frm1.ComboBox1.Items.Add("Test")
尝试了其他几件事,尽管我不记得/张贴所有内容。
必须有一种使用模块来完成我需要的任务的方法。请不要回答"不使用模块" ...
如果我在Form1中使用私人,共享或公共功能,我会遇到相同的错误。
我想将代码尽可能简单地发布到任何对象的情况下,而没有自定义名称。这样,如果问题得到回答并有效,未来的人们在Google上花费了数小时,这将更容易地将答案实施到自己的作品中。
感谢您的所有帮助,Donnie
您所寻找的是从其他代码中以您的表单中的'做事'的量身定制的接口。
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
'startup stuff
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MyFuction1()
End Sub
Public Sub AddItemToComboBox1(TheThing as String) ' This is what you need
ComboBox1.Items.Add(TheThing)
End Sub
End Class
,然后在模块中
Module Module1
Public Sub TestAddThingToComboBox1()
Dim Frm1 As Form1
Frm1 = New Form1
Frm1.AddItemToComboBox1("Test")
End Sub
End Module
为什么?OOP封装的目的是工作级别的细节是...嗯...封装,用户可以使用定义明确的接口。表单控件是工作级别细节的一部分。此外,您可以在接口中添加输入验证和其他酷代码,或者更好地管理数据(例如,重新订购ComboBox(。
作为旁边 - 当不打算返回值时,请使用Sub
而不是Function
。更安全的编码,您不能小心分配给某物。
form1.vb
Partial Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
'startup stuff
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MyFunction1()
End Sub
End Class
module1.vb
Partial Class Form1
Public Sub MyFunction1()
ComboBox1.Items.Add("Test")
End Sub
End Class
module1.vb不再是一个模块,但是对于分裂文件,我仍然可以按照我打算使用模块的方式使用它。