VB.NET - 使用模块添加到 Form1 上的组合框,对非共享成员的引用需要对象引用

问题描述 投票:0回答:3

我已经有一段时间没有做过任何视觉基础工作了。这个问题困扰了我一天的大部分时间。我记得过去 VB.net 容易得多...

我遇到的问题是我需要一个模块来更改/添加到 Form1 上的对象。为了解决这个发布的问题,我将通过使用模块内部的函数“添加”一个项目到位于 Form1 上的 ComboBox。

简单的代码示例:

表格1

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 中使用私有、共享或公共函数,也会遇到同样的错误。

我想发布尽可能简单的代码,而不需要为任何对象自定义名称。这样,如果问题得到解答并且有效,未来的人们在谷歌上花费数小时的时间将更容易将答案应用到他们自己的作品中。

感谢您的所有帮助, 唐尼

vb.net forms module reference
3个回答
0
投票

您正在寻找的是一个定制的界面,可以通过其他代码在您的表单中“执行操作”。

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
。更安全的编码,您不会意外地将其分配给某些东西。


0
投票

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

模块1.VB

Partial Class Form1
Public Sub MyFunction1()
    ComboBox1.Items.Add("Test")
End Sub
End Class

module1.vb 不再是一个模块,但是通过拆分文件,我仍然可以按照我想要使用模块的方式使用它。


0
投票
Private Sub ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox.SelectedIndexChanged
   Dim selectedCenter As String = ComboBox.SelectedItem.ToString()
   If selectedCenter = "All" Then
       allData = data
   Else 
       allData = dara.Where(Function(data) data("name") = selectedCenter).ToList() 
   End If

结束子

© www.soinside.com 2019 - 2024. All rights reserved.