我有一个MDI应用程序。用户可以打开不同的非模态形式,例如形式A和形式B.在形式A上,有一个按钮打开另一个形式(假设形式为C),形式B(按钮打开形式D)也是如此。我想要实现的是C阻塞A和D阻塞B. ShowDialog不起作用,因为它会阻止整个应用程序,所以我试图禁用表单A,然后在布尔值上循环一次,当C关闭时设置为false(即:while(阻塞)Application.DoEvents() )。在以下代码行中,我重新启用A,然后使用从C获得的结果。 它似乎有效,但是如果我从A打开C然后从B打开D,则A被C和D阻塞,而不仅仅是D. 有没有办法实现我想要做的事情?
答案 0 :(得分:0)
也许最好像这样模拟你想要的东西:
类似的是B-D,无论组合......
答案 1 :(得分:0)
您可以使用Form.Activate来强制某种形式。例如,当D阻止B并且用户选择(激活/设置焦点)B时,您可以在D上调用Form.Activate。它不是完全模态的,但会强制执行您的Form-to-Form关系。当然,如果没有D来阻止B,你就不会打电话给Activate。这种方法也不需要使用DoEvents,因为任何Form都不会被锁定。
答案 2 :(得分:0)
最终以这种方式解决了这个问题:
在A的方法中打开C I
1.禁用表格A
2.创建一个C实例(如果在C关闭后我需要一些数据,则将其存储在A的字段中)
3.将类A中定义的方法cClosed附加到C
实例的事件FormClosed
4.打开表格C.
在方法cClosed I:
1.重新形成A
2.在结束C之后做我需要的任何事情
3.清除包含C的字段(如果存在)