【问题标题】:Detecting an OnFormClosing event from a child form从子窗体中检测 OnFormClosing 事件
【发布时间】:2013-04-08 08:25:43
【问题描述】:

我有一个父表单,称为表单 A。这会创建子表单,可以说称为表单 B。

For A 订阅了表单 B 的 FormClosing 事件,并根据此操作进行更改。

我想知道的是,如何检测Form 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

有什么想法/建议吗?

【问题讨论】:

    标签: .net vb.net winforms formclosing


    【解决方案1】:

    通常方法的参数告诉你一切。调查

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

    您应该能够通过查看sender 参数来确定是谁造成的。

    【讨论】:

    • 我遇到的问题是它作为发件人传回的对象是整个表单。我相当肯定我做错了什么......
    • 当您按CancelOK 时,您一定是在调用方法,是吗?所以如果这些有Click-events,你可以为CancelOK设置一个对象到某个状态,如果你点击X它可能是null或任何东西,所以你知道它是不是OK。这个怎么样?然后可以在Closing-method 中读取状态?
    • 谢谢。这很有道理。
    【解决方案2】:

    您可以使用DialogResult 属性来确定表单 B 的关闭方式。

    【讨论】:

      【解决方案3】:

      试试这个代码

           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
      

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        相关资源
        最近更新 更多