0

我有一个主要形式[frmHome]。它有两个子形式[sbfHome]& [sbfRemarkHome]

我希望用户能够单击任一表单上任何记录中的任何字段,并打开一个包含该记录所有相关数据的新表单。

我已经尝试过.ActiveControl,但它总是 FALSE 不起作用。

我也试图ActiveForm.Name在我的代码的 EOF/BOF 部分中使用和携带它。

我怎么知道哪个子表单有焦点?

 Private Sub btnSummary_Click()
 Dim frmCurrentForm As String
 frmCurrentForm = ActiveForm.Name

 If Not (Me.frmCurrentForm.Form.Recordset.EOF And 
 Me.frmCurrentForm.Form.Recordset.BOF) Then
    With Me.frmCurrentForm.Form.Recordset
      txtEARNumber = .Fields("EAR Number")
    End With
 End If

DoCmd.OpenForm "frmView"
[Forms]![frmView].txtEARNumber = txtEARNumber
Forms!frmView.Form.Requery
Forms!frmView.Refresh
End Sub

或者

 Private Sub btnSummary_Click()

 If Me.sbfHome.Form.ActiveControl = True Then

    If Not (Me.sbfHome.Form.Recordset.EOF And Me.sbfHome.Form.Recordset.BOF) 
    Then
        With Me.sbfHome.Form.Recordset
          txtEARNumber = .Fields("EAR Number")
        End With
    End If

Else

     If Not (Me.sbfRemarkHome.Form.Recordset.EOF And 
       Me.sbfRemarkHome.Form.Recordset.BOF) Then
       With Me.sbfRemarkHome.Form.Recordset
        txtEARNumber = .Fields("EAR")
       End With
     End If

End If

DoCmd.OpenForm "frmView"
[Forms]![frmView].txtEARNumber = txtEARNumber
Forms!frmView.Form.Requery
Forms!frmView.Refresh
End Sub
4

1 回答 1

0

我想我理解你的问题。我建议使用事件来告诉父对象在子表单上执行了哪些操作。这样,焦点本身并不重要,重要的是行动发生的地方。这也意味着两个对象之间的耦合要松散得多。

在我的示例中,我制作了 3 种形式MasterSubForm1SubForm2. 我将两个子表单绑定到带有一些模拟数据的表并制作它们continuous forms。布局如下所示:

在此处输入图像描述

每个子表单中的代码都是相同的:

Option Compare Database
Option Explicit

Public Event ButtonClicked(FormName As String, RecordId As Long)

Private Sub Command0_Click()
    RaiseEvent ButtonClicked(Me.Name, Me.ID)
End Sub

这表示ButtonClicked只要单击 Command0 按钮就会引发事件。您可以根据需要自定义事件中的这些参数。

然后在主窗体中,您可以在事件发生时收听事件,如下所示:

Option Compare Database
Option Explicit

Private WithEvents SubForm1 As Form_SubForm1
Private WithEvents SubForm2 As Form_SubForm2

Private Sub Form_Load()
    Set SubForm1 = frmSubForm1.Form
    Set SubForm2 = frmSubForm2.Form
End Sub


Private Sub SubForm1_ButtonClicked(FormName As String, RecordId As Long)
    DoSomething FormName, RecordId
End Sub


Private Sub SubForm2_ButtonClicked(FormName As String, RecordId As Long)
    DoSomething FormName, RecordId
End Sub


Private Sub DoSomething(FormName As String, RecordId As Long)
    txtMessages = "Form Name: " & FormName & ", Record ID: " & RecordId
End Sub

在此处输入图像描述 在此处输入图像描述

于 2018-02-01T18:00:36.610 回答