我有两种形式,表单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
它仍然无法正常工作。我在这里错过了什么吗?
答案 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