2013-04-08 66 views
0

我有一个父窗体,称为A型。这将创建子窗体的OnFormClosing事件,可以说,所谓的形式B.检测从子窗体

一个订阅,形成B的事件的FormClosing,使基于这种变化行动。

我想知道的是,如何检测窗体B中的哪个控件导致FormClosing事件触发。如果按下“X”或“取消”按钮,并且按下OK按钮,我希望代码按照一种方式行事。

的代码看起来是这样的:

Private Sub btnAddSections_Click(sender As Object, e As System.EventArgs) Handles btnAddSections.Click 
    Cursor = Cursors.WaitCursor 
    Dim frm As New dlgAddPartsMartixSection(m_intMatrixId) 
    AddHandler frm.FormClosing, AddressOf btnAddSectionsRefresh 
    frm.Show() 
    Cursor = Cursors.Default 
End Sub 

Private Sub btnAddSectionsRefresh(sender As Object, e As FormClosingEventArgs) 
    dgvParts.DataSource = Nothing 
    btnAddParts.Enabled = False 
    dgvParts.Refresh() 
    Me.LoadPartMatrices() 
    dgvMatrices.Rows(m_intMatrixLocationId).Selected = True 
    Me.LoadPartSections(m_intMatrixId) 
End Sub 

任何意见/建议?

回答

0

通常该方法的参数告诉你一切。探讨

Private Sub btnAddSectionsRefresh(sender As Object, e As FormClosingEventArgs) 

,你应该能够确定谁被检查出sender参数导致此。

+0

我有但问题在于,它传回发件人的对象是整个窗体。我相当肯定我做错了什么...... – user1708468 2013-04-08 08:41:59

+0

当你按下'取消'或'确定'时,你必须调用方法,是吗?因此,如果这些事件具有“Click”事件,则可以将对象设置为“取消”或“确定”的某个状态,并且如果单击“X”它可能是“空”或任何其他事物,所以您知道它是不是'好'。这个怎么样?然后你可以在'Closing'方法中读取状态? – 2013-04-08 08:46:50

+0

谢谢。这很有道理。 – user1708468 2013-04-08 08:57:32

0

试试这个代码

 Private Sub btnAddSectionsRefresh(ByVal sender As Object, ByVal e As FormClosingEventArgs) 
      if Me.ActiveControl.Text = "X" then 
..... 
...... 
elseif Me.ActiveControl.Text="Cancel" 
..... 
..... 
elseif Me.ActiveControl.Text ="Ok" 
..... 
... 
     End Sub