2016-09-14 111 views
-1

我有一个基本窗体类,我有我的论坛继承。在执行继承的表单中的代码之前,是否可以从基本表单执行代码?我有一个检查,看看他们是否想关闭基类,我不想执行任何内容,直到他们对弹出窗体表示“是”。我怎样才能做到这一点?窗体关闭事件

回答

0

为了获得我想要的确切行为,我在基本关闭事件中添加了两个事件。一个在检查后立即执行,另一个在执行代码后执行。然后,我将继承的类上的FormClosing事件替换为使用这两个事件。这种方法给了我更多的自由,然后只是调用mybase .OnFormClosing

1

而不是在您的子类中处理事件,重写OnFormClosing方法。然后你可以让基类实现按照它的选择进行。然后做你的东西。

Protected Overrides Sub OnFormClosing(e As System.Windows.Forms.FormClosingEventArgs) 
    MyBase.OnFormClosing(e) 
    'my stuff 
End Sub 
+0

这两种解决方案都会导致我的程序两次关闭关闭事件。这是正常的吗? –

2

假设你已经在你的基类的FormClosing事件e.Cancel属性设置为true或false,你只需要在继承的形式来检查e.Cancel值:

Protected Overrides Sub OnFormClosing(e As FormClosingEventArgs) 
    MyBase.OnFormClosing(e) 

    If Not e.Cancel Then 
    MessageBox.Show("Doing Stuff") 
    End If 
End Sub 
+0

这两种解决方案都会导致我的程序两次经历关闭事件。这是正常的吗? –

+0

@DNet工程师是的,它将运行基本结束码,然后运行您的继承基础结束码。如果您需要帮助,请发布您的代码,因为我们看不到您的代码是什么样的。 – LarsTech

+0

它与您的发布代码几乎相同。它将执行MessageBox,然后再次显示消息框。我想我可以添加一个布尔值来阻止它第二次在继承类之后通过基类运行 –