作为初学者,我假设模态窗体在调用 close 方法之前保持打开状态,但 VB.net 中的情况似乎并非如此。我有一个主窗体和一个子窗体,就像电话簿一样。主窗体使用 SHOWDIALOG() 方法打开子窗体。电话簿子窗体上有“保存”、“取消”和“编辑”功能按钮。 ANY 按钮的处理程序会关闭子窗体,即使只有 SAVE 和 CANCEL 显式调用 close() 也是如此。编辑电话簿数据时,表单需要保持打开状态,直到完成所有编辑并且用户选择“保存”或“取消”。
我询问了 Edge 浏览器 Copilot,它显示了一个设置,该设置创建一个异步方法,该方法显示表单,然后等待异步后台操作。即使我理解它是如何工作的(几乎肯定不是这样),它似乎等待单个异步任务,而不是保存或取消。有没有办法使用 VB.net 保持子窗体打开?或者也许这不是正确的行为,我在其他地方做了坏事?
当您通过调用
ShowDialog
显示表单时,调用其 Close
方法实际上并不会关闭它。它只会隐藏它。这就是为什么您应该在使用后始终处理这样的表单,除非您希望能够再次显示相同的实例(您可能会这样做)。
您可以通过设置其
DialogResult
属性来“关闭”(隐藏)模态对话框。如果我没记错的话,调用 Close
方法会将 DialogResult
属性设置为 Cancel
。如果将其设置为 None
以外的任何值,表单将“关闭”(隐藏)。
您的情况可能会发生的是那些
DialogResult
的 Button
属性是在设计器中设置的。单击设置了 Button
属性的 DialogResult
会将相同的值分配给表单的 DialogResult
属性,从而“关闭”(隐藏)它。对 ShowDialog
的调用将返回该值。这就是区分用户在对话中单击了哪个 Button
的方法。
如果您希望每当用户单击特定的
Button
时“关闭”(隐藏)表单,那么您应该这样做。如果您不想做任何额外的事情,则不需要 Click
事件处理程序,但您可以提供一个事件处理程序,它将在表单“关闭”(隐藏)之前执行。如果您想将条件代码放入 Click
事件处理程序中,以便表单可能会或可能不会在每个 Click
上“关闭”(隐藏),请不要设置 Button's
DialogResult
属性,而是设置根据您的 DialogResult
事件处理程序的需要,表单的 Click
属性。