【问题标题】:VB.Net Passing values to another formVB.Net 将值传递给另一种形式
【发布时间】:2013-10-27 13:38:03
【问题描述】:

我想知道如何将值从 form1 传递到另一个表单的公共子。 问题是它说“在这种情况下它是不可访问的,因为它是‘私有的’。”

我尝试将 Form 1 Private Sub 更改为 Public Sub,但仍然存在相同的错误。我应该如何让它发挥作用?

Public Class Form1
Dim test(), text1 As String
Const asd = "abcabc"

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    text1 = Space(LOF(1))
    test = Split(text1, asd)
    HOST = test(1)
End Sub

我想将 HOST = test(1) 值传递给另一个表单

Public Class Form2

Public Sub Check()
    'get the value to here
End Sub

【问题讨论】:

  • 我在 SO 上遇到过这个问题大约一万次。它主要是由 VB 程序员提出的,而不是 C# 程序员。 WinForms 窗体与任何其他 Visual Basic 类一样只是一个类,您将值从一个窗体传递到另一个窗体就像将值从任何类传递到任何其他类一样。只要不涉及多线程,就没有区别。您可以通过构造函数参数(New)、方法(Sub 和 Function)参数、属性甚至通过事件的方式传递值。

标签: vb.net winforms visual-studio visual-studio-2012


【解决方案1】:

您可以将其作为参数传递:

Public Sub Check(valueToCheck as String)
   'get the value to here
End Sub

或者在 form2 上创建一个属性来接收它:

private _HostOrSomething As String = ""
Friend Property HostOrSomething As String
   Get
        Return _HostOrSomething 
    End Get
    Set(ByVal value As String)
        _HostOrSomething = value
    End Set

在这种情况下,Sub Check 可以使用 _HostOrSomething,因为它是本地变量。要使用这些:

HOST = Test(1)
frm2.Check(HOST)

HOST = Test(1)
frm2.HostOrSomething = HOST
frm2.Check

【讨论】:

  • 所以所有这些代码都只用于表格 2?或者也可以形成 1?
  • 只需将Sub Check 更改为像第一个样本一样采用和参数,然后将您想要的值作为参数传递。
【解决方案2】:

您可以使用全局变量将数据从一个传递到另一个

        Dim A As New Integer= 10

这里你如何声明全局类可以在应用程序的任何地方定义。

Public Class GlobalVariables
Public Shared INTver As Integer
End Class

而你如何使用全局变量来存储答案就在这里

GlobalVariables.INTver= A

将此行放入您的“privet sub”中,您可以将变量访问到您的 WINDOWS 应用程序中的任何表单。

【讨论】:

  • "冷静别担心"???这里不需要态度或光顾。这个问题在大约 4 年前被问到(并得到了回答)。但是,您建议使用全局变量(OP 应该合理担心的事情)。
  • “你必须使用全局变量” - 谁说你必须使用全局变量? (实际上根本不是全局的,它们仍然绑定到该类 - 只是没有绑定到实例)。还有许多其他更好的方法可以做到这一点。在这种情况下,使用共享变量根本无效,如果使用不当,实际上可能会破坏程序的预期流程。我同意@DavidMakogon 的观点,认为 OP 应该担心。在这种情况下,首选实例解决方案。
猜你喜欢
  • 2012-08-17
  • 2015-06-23
  • 1970-01-01
  • 2015-06-06
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多