Vb.net ShowDialog不需要注意

Vb.net ShowDialog不需要注意,vb.net,forms,dialog,point-of-sale,Vb.net,Forms,Dialog,Point Of Sale,我有一个关于VB.NET中对话框的问题。我正在做一个销售点计划,在销售过程中,我有几个窗口会弹出。例如,用户将进入窗口a的销售。在窗口a中,用户可以选择输入产品等,如果用户选择“修复”产品,则会打开窗口B,允许用户选择选项。在窗口B中,有一个按钮弹出窗口C,允许他们将产品连接到维修。我的问题是窗口B打开窗口C 因为我将窗口B作为对话框打开是为了检查DialogResult.OK是否为真,所以我用B打开的任何窗口都是不可触摸的,因为B是对话框,在转到任何其他窗口/窗体之前都需要注意 我的问题是-是

我有一个关于VB.NET中对话框的问题。我正在做一个销售点计划,在销售过程中,我有几个窗口会弹出。例如,用户将进入窗口a的销售。在窗口a中,用户可以选择输入产品等,如果用户选择“修复”产品,则会打开窗口B,允许用户选择选项。在窗口B中,有一个按钮弹出窗口C,允许他们将产品连接到维修。我的问题是窗口B打开窗口C

因为我将窗口B作为对话框打开是为了检查DialogResult.OK是否为真,所以我用B打开的任何窗口都是不可触摸的,因为B是对话框,在转到任何其他窗口/窗体之前都需要注意

我的问题是-是否有任何方法可以继续使用对话框,但允许在对话框打开时操作其他打开的表单,如果没有,那么最好的方法是什么来检查用户是否选择了“确定”或取消了窗口

我现在能想到的唯一解决方案是将window C作为一个对话打开,它实际上是一个用户控件,我仍在试图找到它在代码中实际被打开/调用的位置,或者创建一个传入表单的变量,然后在它关闭时传回,这基本上设置了一个标志,要么继续,要么取消


有什么建议/想法吗?

如果我用代码来解释这个问题,这个答案会很长,所以我会给你一个高层次的概述

.Show vs.ShowDialog 下面的链接将带您访问微软的网站,解释这两者之间的技术差异。但是,按照外行的说法,.ShowDialog将创建一个窗体,在该窗体中,它是应用程序中唯一允许具有焦点的窗口。在此实例中调用的表单是分层的,因为如果按1,2,4,3的顺序打开它们,则必须按3,4,2,1的顺序关闭它们。使用just.Show打开的表单可以随时聚焦

Form.FormBorderStyle属性 此属性控制操作系统显示窗口的方式。此选项下的不同选项会更改窗口的行为方式。根据选择的选项,您可以创建一个只有关闭按钮的窗口,或者甚至可能根本没有标题栏。将此选项设置为“无”将取消窗体的所有控件,只留下Me.clientrea供您使用。当你想要一个完全定制的GUI时,这就是你要做的,但是你必须实现你自己的控件,关闭表单,大小句柄,在屏幕上移动表单的能力,等等

在表单之间传递数据
当有人问如何在表单之间来回传递数据时,他们通常会谈论使用.Show创建的无模式表单。我在上面看到的最常见的事情是使用对象的tag属性。表单是一个也具有此属性的对象,用于来回传递数据。虽然我不会说这是一种不好的做法,但我建议您在表单上创建公共属性。可以从单独的表单设置这些值,并且在设置值时可以执行其他操作。不过,请小心,这种方法不是线程安全的。如果将非模态窗体当作模态窗体使用,则可以简单地重写.Dispose属性以返回值,也可以创建名为DialogResult的方法以返回所需的值。使用DialogResult或类似方法的注意事项是,如果表单已被释放,则无法访问要返回的值。

对于要显示为对话框的窗口,可以使用myNewForm.ShowMe。这将显示myNewForm作为当前窗体的子窗体,但允许您与当前窗体进行交互。

我刚刚发现了一种称为“无模式对话框窗体”的东西,这显然正是我要寻找的,但在找到如何实现它的实例时遇到了困难。。。。有什么想法吗?对于“无模式对话框窗体”,将frmFoo变为新的FooForm frmFoo.ShowAh,这样我就不能使用最后的“If DialogResult=DialogResult.OK”复选框。。。该死!谢谢你的回复!我认为您需要将Dim frmC称为New FormC frmC.ShowDialogMe,其中我是FormB的实例。