VB.NET-使用模块在Form1上添加到Combobox,对非共享成员的引用需要对象参考



自从我完成了任何视觉基本工作以来已经有一段时间了。这个问题使我在一天中最好的部分中度过了困难。我记得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不再是一个模块,但是对于分裂文件,我仍然可以按照我打算使用模块的方式使用它。

最新更新