【问题标题】:Catch a value from form1 to form2 in vb [closed]在vb中捕获从form1到form2的值[关闭]
【发布时间】:2014-07-09 01:10:28
【问题描述】:

在 VB 中,我在 1 个项目中创建了 2 个表单。在 form1 中,我放置了 3 个不同值的按钮。在form2中,我只放了1个没有价值的文本框。

我的问题是,如果我按下 form1 中的一个按钮,form2 会自动打开,并且我按下的按钮的值会自动添加到 form2 文本框吗?

【问题讨论】:

  • vb6 和 vbscript 以及 vba 和 vb.net。您是否意识到它们是不同的东西?

标签: vb.net vba vbscript vb6


【解决方案1】:

将以下代码添加到您的按钮处理程序中。您可以双击按钮并将代码添加到自动创建的事件处理程序中:

    'Here we are creating actual object and passing string into it constructor method
    Dim instanceOfForm2 = new Form2("String value from Form1!") 
    instanceOfForm2.Show() ' Showing form

在 Form2 中,我们需要调整构造函数以接受一个参数:

Public Sub New(someValue as String)
    InitializeComponents() 'This is always first row in form constructor
    TextBox1.Text = someValue 'And put that text into textbox...
End Sub

【讨论】:

    【解决方案2】:

    在 VB6 中,您可以执行 lardymonkey 所具备的所有功能,但您不必这样做。做你想做的最简洁的方法就是这样。首先,将 Form1 中的三个命令按钮变成一个控件数组。为此,将它们全部命名为相同的名称(在我的示例中我将使用“cmdMyButtons”),并将它们的索引属性设置为 0、1 和 2。然后在 Form1 的代码窗口中执行此操作:

    Option Explicit
    
    Dim ButtonText(2) As String
    
    Public Sub Form_Load()
        ButtonText(0) = "First Button Text"
        ButtonText(1) = "Second Button Text"
        ButtonText(2) = "Third Button Text"
    End Sub
    
    Public Sub cmdMyButtons_Click(Index As Integer)
        With Form2
            .txtMyTextBox.Text = ButtonText(Index)
            .Show vbModal
        End With
    End Sub
    

    现在,我喜欢 lardymonkey 模态显示的想法,所以我也把它放在这里。但是,他的代码示例中的一些内容对于执行您想要的操作并产生开销并不是本质上所必需的,因此我将它们删除:

    1. 您不需要创建属性;你可以只设置文本 直接就像我在这里一样。
    2. 您不需要创建表单变量;您可以像我在这里一样直接引用表格。
    3. 您不必显式加载表单;表格得到 设置变量后自动加载(顺便说一下, Show 方法也自动加载表单——你只使用 当您希望在执行之前将表单加载到内存中时加载 任何东西)。
    4. 如果您关闭模态窗体,它将是 自动卸载。但是,卸载表单不会设置任何 引用它的对象变量什么都没有。因此,frmDetail 当你检查它时不会是 Nothing,你会卸载一个表单 未加载。虽然这不会引发错误(该语句被忽略),但无论如何我都不会这样做。所以,你不 需要任何“确保表单被销毁”的代码。

    现在,关于始终显式销毁对象变量的整个业务的简短讲座:

    关于在 VB6 中退出子例程之前是否需要将所有局部对象变量显式设置为 Nothing,这是一个长期存在的争论。我完全不同意这一点;当变量超出范围时,VB 会自动处理这个问题。据我所知,人们认为他们必须这样做的原因是作用域终结器不会以任何特定的顺序收集垃圾,有时两个交互的 COM 对象需要以特定的顺序销毁耦合架构。在这种情况下,您确实需要以正确的顺序清除对象以解决间歇性错误,因此神话发展了 VB 的垃圾收集存在错误,需要通过始终手动销毁对象变量来规避。

    坦率地说,程序员总是这样做并且永远不会忘记的想法是幼稚的。所以我坚持不同意; VB6 的开发人员在开发范围终结器方面投入的精力和精力比任何程序员都多。

    【讨论】:

      【解决方案3】:

      不知道您使用的软件的具体版本我们无法回答,如果您提供正确的版本我们可以回答

      在 .net 中创建表单然后传递值很简单。

      Friend objForm2 as New Form2
      Private Sub button1_Click(ByVal sender As System.Object, ByVal e as System.EventArgs) Handles button1.Click
      objForm2 = new Form2()
      TextBox1.Text = value
      End Sub
      

      【讨论】:

        【解决方案4】:

        这将是 VB6 中的一种方式。我已将错误处理留给您。

        我假设文本框的名称是 form2 上的 txtOutput。

        在 Form2 中添加以下内容:

        Option Explicit
        
        Public Property Let OutputText(ByVal strOut As String)
        
            txtOutput.Text = strOut
        
        End Property
        

        在 Form1 中添加以下内容:

        Option Explicit
        
        Private Sub Command1_Click()
            DisplayForm "1"
        End Sub
        
        Private Sub Command2_Click()
            DisplayForm "2"
        End Sub
        
        Private Sub Command3_Click()
            DisplayForm "3"
        End Sub
        
        Private Sub DisplayForm(ByVal strValue As String)
        'Declare the variables
        Dim frmDetail As Form2
        
            'Create the form
            Set frmDetail = New Form2
        
            'Load the form and display it modal
            Load frmDetail
            frmDetail.OutputText = strValue
            frmDetail.Show vbModal, Me
        
            'Make sure the form is destoryed
            If Not frmDetail Is Nothing Then
                Unload frmDetail
                Set frmDetail = Nothing
            End If
        
        End Sub
        

        确保您对代码进行了注释,如果您需要一些错误处理,请添加它。如果您需要有关 VB6 功能的帮助,可以在这里找到它MSDN VB6 Reference

        【讨论】:

        • 我的代码有一些问题。请参阅我的回答,如果您认为是我错了,请随时纠正我。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多