不需要注意ShowDialog

时间:2014-06-17 19:57:18

标签: vb.net forms dialog point-of-sale

我对VB.NET中的Dialogs有疑问。我正在制作一个销售点计划,在销售过程中的某个时刻,我会弹出几个窗口。例如,用户将进入窗口A的销售。在窗口A中,他们可以选择输入产品等,如果他们选择“维修”产品,则会打开窗口B,允许他们选择选项。在窗口B中,有一个弹出窗口C的按钮,允许它们将产品附加到修复中。我的问题是窗口B打开窗口C。

因为我打开窗口B作为对话框(为了检查DialogResult.OK是否为真),我用B打开的任何窗口都是不可触摸的,因为B是一个Dialog并且在去任何其他窗口之前需要注意/形式。

我的问题是 - 有没有办法继续使用对话框,但允许在对话框启动时操纵其他打开的表单,如果没有,那么检查用户是选择确定还是取消的最佳方法是什么窗外?

我现在能想到的唯一解决方案就是打开窗口C作为对话框(它实际上是一个UserControl,我仍然试图找到它实际上被打开/调用的代码在哪里),或者创建一个传递给表单的变量,然后在它关闭时传回,基本上设置一个标志来继续或取消......

任何建议/想法??

2 个答案:

答案 0 :(得分:0)

如果我使用代码解释这个问题,这个答案会很长,所以我会给你一个高级别的概述。

.Show()vs .ShowDialog()

以下链接将带您到Microsofts网站解释这两者之间的技术差异。但是在外行术语中,。ShowDialog()将创建一个表单,它是允许在应用程序中聚焦的唯一窗口。在此实例中调用的表单是分层的,因为如果按1,2,4,3的顺序打开它们,则必须以3,4,2,1顺序关闭它们。只使用.Show()打开的表单可以随时聚焦。

How to: Display Modal and Modeless Windows Forms

Form.FormBorderStyle属性

此属性控制操作系统显示窗口的方式。此选择下的不同选项会更改窗口的行为方式。根据所选的选项,您可以创建一个只有一个关闭按钮的窗口,或者甚至可能根本没有标题栏。将此选项设置为None会删除表单的所有控件,并且只允许Me.ClientArea使用。如果你想要一个完全自定义的GUI,你就是这样做的,但是你必须为所有东西实现自己的控件,关闭表单,大小句柄,在屏幕上移动表单的能力等......

Form.FormBorderStyle Property

在表单之间传递数据

当有人询问如何在表单之间来回传递数据时,他们通常会讨论使用.Show()创建的无模式表单。我在SO上看到的最常见的事情是使用对象的tag属性(表单也是具有此属性的对象)来回传递数据。虽然我不会说这是一个不好的做法,但我会建议在表单上创建公共属性。这些可以从单独的表单设置,您可以在设置值时执行其他操作(但要小心,这种做法不是线程安全的)。如果您使用的是无模式表单,就好像它是一个模态表单一样,那么您可以简单地覆盖.Dispose属性以返回值,或者您可以创建一个名为DialogResult的方法,该方法将返回您需要的值。使用DialogResult或类似方法的警告是,如果表单已经处理掉,那么您无法访问要返回的值。

答案 1 :(得分:0)

您可以将myNewForm.Show(Me)用于要作为对话框显示的窗口。这将显示myNewForm作为当前表单的子项,但允许您与当前表单进行交互。