如何在vb.net中从另一个表单中选中表单1的复选框?

时间:2013-05-08 17:11:13

标签: vb.net

我有两种形式,表单1和表单2(Windows应用程序)。如何访问并选中表单2中表单1中的复选框。最初我尝试调用表单名称,然后调用form1.chkCanada.checked = true之类的控件,它不起作用。然后我在表单1中添加了一个属性

Public Property abc As Boolean
    Get
        Return chkCanadianStmtInd.Checked
    End Get
    Set(value As Boolean)
        chkCanadianStmtInd.Checked = value
    End Set
End Property

然后是表格2

Dim frm As New frm1
frm.abc = True  'Checked

它仍然无法正常工作。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:0)

在此合并评论:

为了访问向用户显示另一个表单的表单上的控件,您有两个选项,如果第一个表单不需要交互而第二个表单处于活动状态,则可以使用showdialog并执行所有操作在第二个表单关闭后你的逻辑,如果你需要保持与第一个表单交互的能力,而第二个表单仍然打开,那么你需要使用自定义事件。

ShowDialog的:

两个选项中较简单的方法是将form.show()函数调用切换为form.showdialog()。这有效地告诉第一种形式它应该停止在form.showdialog()行处理并等待子表单关闭然后再继续。一旦第二个表单关闭,第一个表单将从它停止的地方开始,这将是依赖于第二个表单的值的任何处理将发生的地方。

自定义事件:

如果您想允许用户同时与第一个和第二个表单进行交互,那么您将需要使用自定义事件。为了做到这一点,你需要三件事。自定义事件,raiseevent调用和事件处理程序。

因此,在Form2类中,您需要声明自定义事件。在这种情况下,因为您试图检查(或取消选中我假设)一个框,您的自定义事件声明将如下所示:

public event ChangeCheckedValue(byref state as boolean)

现在,在按钮单击事件中,您需要将事件提升到Form1上的处理程序:

RaiseEvent ChangeCheckedValue(booleanValue)

现在这些语句已经到位,您需要更改Form1显示的form2对象。我通常做的是在Form1上使Form2成为一个表格变量,并声明如下:

private withevents frm as Form2

在Form1类中拥有frm变量后,您可以为ChangeCheckedValue事件添加处理程序:

protected sub HandleCheckChanged(byref bln as boolean) handles frm.ChangeCheckedValue
    'Set the checked state of your checkbox.
End sub

完成所有设置后,您应该看到自己的期望。

答案 1 :(得分:0)

或者,您可以将form1的句柄传递给form2构造函数

Form1中:

Public Class Form1

  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim _form2 As New Form2(Me)

    _form2.Show()
  End Sub
End Class

窗体2:

Public Class Form2

  Public Sub New(ByVal _form1 As Form1)

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    _form1.CheckBox1.Checked = True

  End Sub


End Class