【问题标题】:Do not require attention for ShowDialogShowDialog 不需要注意
【发布时间】:2014-06-17 19:57:17
【问题描述】:

我有一个关于 VB.NET 中的对话框的问题。我正在开发一个销售点程序,并且在销售过程中的某个时刻,我会弹出几个窗口。例如,用户将进入窗口 A 的销售。在窗口 A 中,他们可以选择输入产品等,如果他们选择“维修”产品,则会打开窗口 B,允许他们选择选项.在窗口 B 中,有一个弹出窗口 C 的按钮,允许他们将产品附加到修理处。我的问题是窗口 B 打开窗口 C。

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

我的问题是 - 有没有办法仍然使用对话框,但允许在对话框启动时操作其他打开的表单,如果没有,检查用户是否选择 OK 或取消的最佳方法是什么窗外?

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

有什么建议/想法吗??

【问题讨论】:

  • 我刚刚发现了一个叫做“无模式对话框表单”的东西,这显然正是我正在寻找的东西,但是找不到如何实现它的实例......有什么想法吗?跨度>
  • For 'Modeless Dialog Form' Dim frmFoo As New FooForm() frmFoo.Show()
  • 啊,那么我将无法在最后使用“If DialogResult = DialogResult.OK”检查... dangit!不过感谢您的回复!
  • 我认为您需要调用Dim frmC As New FormC() frmC.ShowDialog(Me),其中Me 是FormB 的实例。

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


【解决方案1】:

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

.Show() 与 .ShowDialog()

下面的链接将带你到微软的网站来解释这两者之间的技术差异。然而,通俗地说,.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 或类似方法的警告是,如果表单已被释放,那么您将无法访问您想要返回的值。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 2018-03-09
      • 1970-01-01
      • 2012-05-06
      • 2013-01-04
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多