在vb中捕获从form1到form2的值

时间:2014-05-20 16:39:02

标签: vb.net vba vbscript vb6

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

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

4 个答案:

答案 0 :(得分:2)

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

    '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

答案 1 :(得分:1)

在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 当你检查它时,它将不会是什么,你将卸载一个表格 没有加载。虽然这不会引发错误(语句被忽略),但我还是不会这样做。所以,你没有 需要任何“确保表单被破坏”的代码。
  5. 现在,关于整个业务的简短演讲总是明确地破坏对象变量:

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

    坦率地说,程序员总是这样做并且永远不会忘记的想法是天真的。所以我坚持不同意它; VB6的开发人员在开发范围终结器方面付出了更多的思考和努力,而不是任何程序员将要绕过它。

答案 2 :(得分:0)

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

在.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

答案 3 :(得分:0)

这将是在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

找到它