winforms 如何暂停非模态窗口的代码执行(Form.show())

u59ebvdq  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(54)

目前,我有一个vb.net报告应用程序,它调用另一个DLL(C#)方法,该方法具有Form.ShowDialog()以打开嵌入式浏览器窗口。当嵌入式浏览器窗口关闭时,它向数据库发送消息,我们根据该消息更新主报告应用程序。
现在,我们想使用Form.Show()使嵌入式浏览器窗口无模式。这里的目标是允许用户在嵌入式浏览器窗口上工作时查看主应用程序,但我们将禁用主应用程序中的某些功能,并在最后重新启用它们。
我尝试在C#项目中的FormClosedEventHandler中发送消息,但它并不理想。看起来我必须重构很多代码才能将代码移动到窗体关闭事件中。即使我走这条路,似乎主应用程序也没有简单的方法来知道嵌入式浏览器窗口何时关闭并重新启用早期禁用的功能。
有没有什么方法可以像ShowDialog()一样暂停代码执行,或者有什么建议吗?

mutmk8jj

mutmk8jj1#

根据我的评论,你只需像处理子控件一样处理对话框的FormClosed事件。在VB中,你可以声明一个字段WithEvents并使用一个Handles子句,就像在设计器中添加控件一样:

Private WithEvents someDialogue As SomeForm

Private Sub someDialogue_FormClosed(...) Handles someDialogue_FormClosed
    'The dialogue has closed so do as appropriate here.

    'Clear the field to remove the event handler, if and only if the same form will not be used again.
    someDialogue = Nothing
End Sub

字符串
否则,您可以在创建对象时显式注册事件处理程序,并在完成后删除它:

Private Sub someDialogue_FormClosed(...)
    'The dialogue has closed so do as appropriate here.

    Dim dialogue = DirectCast(sender, SomeForm)

    RemoveHandler dialogue.FormClosed, AddressOf someDialogue_FormClosed
End Sub
Dim dialogue As New SomeForm

AddHandler dialogue.FormClosed, AddressOf someDialogue_FormClosed

的数据

相关问题