提问人:Michael 提问时间:10/24/2023 最后编辑:Michael 更新时间:10/25/2023 访问量:51
如何暂停非模态窗口的代码执行(Form.show())
How to pause code execution for non-modal window(Form.show())
问:
目前,我有一个 vb.net 报表应用程序,它调用另一个 DLL (C#) 方法,该方法必须打开嵌入式浏览器窗口。当嵌入式浏览器窗口关闭时,它会向数据库发送一条消息,然后我们根据该消息更新主报表应用程序。Form.ShowDialog()
现在,我们想通过使用 使嵌入式浏览器窗口无模式化。这里的目标是允许用户在嵌入式浏览器窗口上工作时查看主应用程序,但我们将禁用主应用程序中的某些功能,并在最后重新启用它们。Form.Show()
我试图在 C# 项目中发送消息,但这并不理想。看起来我必须重构大量代码才能将代码移动到表单关闭事件中。即使我走这条路,似乎也没有简单的方法可以让主应用程序知道嵌入式浏览器窗口何时关闭并重新启用早期禁用的功能。FormClosedEventHandler
有没有办法像ShowDialog()或任何建议一样暂停代码执行?
答:
0赞
jmcilhinney
10/24/2023
#1
根据我的评论,您只需像处理儿童控件一样处理对话的事件。在 VB 中,可以声明一个字段并使用子句,就像在设计器中添加控件一样:FormClosed
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
评论
0赞
Michael
10/25/2023
抱歉,我认为我对问题的糟糕描述可能无法在此处正确描述我的问题。我的主报表应用程序没有调用以从 C# 项目打开窗体。它调用一个适配器项目来做一些验证(我省略了这部分,试图让它更简单),然后适配器从具有 someform.show() 的 c# 项目中调用一个方法。如何从主报表应用程序中检测 C# 项目的某种形式?很抱歉造成混乱!
评论