1

我在一个名为 PolicyRefreshStatus.vb 的 vb.net windows 窗体应用程序中有一个窗体,上面有一个 ProgressBar 控件。从名为 EditPolicy.vb 的主窗体中,我需要在 EditPolicy.vb 之上显示 PolicyRefreshStatus.vb - 但是连接方式我正在控制 ProgressBar,它是 EditPolicy.vb 内部逻辑的步骤。

如果我使用 .show() 方法显示 PolicyRefreshStatus.vb 栏,则一切正常。问题是如果用户在主窗体上单击返回,则 PolicyRefreshStatus.vb 失去焦点。如果我使用 .ShowDialog() 将 PolicyRefreshStatus.vb 显示为模式形式,则在 .ShowDialog() 语句之后的 EditPolicy.vb 中执行停止。

例如在代码中:

 mPolicyRefreshStatus = New PolicyRefreshStatus
 mPolicyRefreshStatus.pbMax = mPolicy.ClaimsUpdateMax
 mPolicyRefreshStatus.ShowDialog()
 mPolicy.UpdateFromFIS() 

mPolicy.UpdateFromFIS() 行永远不会执行,因为它正在等待 PolicyRefreshStatus 表单关闭。

如何以模态形式显示 PolicyRefreshStatus 但在 EditPolicy.vb 中继续执行?

4

2 回答 2

0

您不能以模态方式显示表格并让您的例程继续。您必须以非模态方式显示表单,然后执行其他操作,完成后关闭表单。也许是一个循环,直到任务完成?

将 Show() 与父表单参数一起使用将为您提供更好的可用性。更像是一个工具窗口。

于 2012-04-18T17:19:02.323 回答
0

你有几个相关的选项。

这首先是以委托或实现接口的类的形式将工作单元传递给进度条。像这样的东西(没有检查正确性,只是一个粗略的例子):

mPolicyRefreshStatus = New PolicyRefreshStatus  
mPolicyRefreshStatus.pbMax = mPolicy.ClaimsUpdateMax  
mPolicyRefreshStatus.UnitOfWork = AddressOf(mPolicy.UpdateFromFIS())
mPolicyRefreshStatus.ShowDialog()  

然后在进度表中,您可以回调实际完成工作的例程。

Another approach is to define events on your ProgressForm and then the owning/launching object can handle those events to do the work in. With this option you can create a fairly detailed set of events to be able to handle incremental work or cancels, but the concept is the same, youu are calling back from the progress form into launcher to perform the actual business logic.

于 2012-04-19T12:01:49.327 回答