VB.NET实现显示另一个窗体时暂停代码,区分保存/取消操作
解决方案
要实现显示窗体时阻塞代码、根据按钮点击决定是否执行后续逻辑,核心是正确使用ShowDialog()并配合DialogResult判断用户操作,具体步骤如下:
1. 修改主窗体的代码逻辑
把原来的frm.Show()替换为frm.ShowDialog(),并根据对话框的返回值决定是否执行后续代码:
If ItemsNoLbl.Text = "0" Then MsgBox("There is no item to sale") Exit Sub Else Dim frm As New EndBill_FRM frm.CustomerLbl.Text = "Customer Name : " + CustomerCmb.Text If CustomerCmb.Enabled = False Then frm.BalanceLbl.Text = "Balance: 0&" frm.LastDebtLbl.Text = "0" frm.BalLbl.Text = "0" Else frm.BalanceLbl.Text = "Balance:" + BalanceLbl2.Text frm.LastDebtLbl.Text = DebtLbl2.Text frm.BalLbl.Text = BalanceLbl.Text End If frm.totalLbl2.Text = TotalLbl2.Text frm.totalLbl.Text = TotalLbl.Text frm.debt = Val(DebtLbl2.Text) frm.totalBill = Val(TotalLbl2.Text) frm.balance = Val(BalanceLbl.Text) ' 替换Show()为ShowDialog(),获取对话框返回值 Dim dialogResult As DialogResult = frm.ShowDialog() ' 仅当用户点击Save(返回OK)时才执行后续代码 If dialogResult = DialogResult.OK Then ' ****** 这里开始执行后续逻辑 ***** If CustomerCmb.Enabled = False Then InsertSalse() Else Dim debt As Decimal = Val(DebtLbl2.Text) Dim totalBill As Decimal = Val(TotalLbl2.Text) Dim total As Decimal = debt + totalBill If total < Val(BalanceLbl.Text) Then InsertSalse() Else MsgBox("The sale could not be completed because the invoice amount exceeded the available balance") Exit Sub End If End If MsgBox("Saved Seccessfully!") UpdateQuantity() New Sale_Form.Show() End If End If
2. 配置EndBill_FRM窗体的按钮
需要给EndBill_FRM里的Save和Cancel按钮设置对应的DialogResult,让窗体关闭时返回正确的状态:
方法一:通过代码设置按钮事件
在EndBill_FRM的代码中添加按钮点击事件:
' Save按钮点击事件 Private Sub SaveBtn_Click(sender As Object, e As EventArgs) Handles SaveBtn.Click ' 可在此添加保存相关的前置逻辑(如验证数据) Me.DialogResult = DialogResult.OK Me.Close() End Sub ' Cancel按钮点击事件 Private Sub CancelBtn_Click(sender As Object, e As EventArgs) Handles CancelBtn.Click Me.DialogResult = DialogResult.Cancel Me.Close() End Sub
方法二:通过设计器直接设置属性
打开EndBill_FRM的设计视图:
- 选中Save按钮,在属性窗口找到
DialogResult,设置为OK - 选中Cancel按钮,在属性窗口找到
DialogResult,设置为Cancel
这样点击按钮时,窗体自动关闭并返回对应的DialogResult,无需手动写Close()代码。
问题原因说明
你之前用ShowDialog()无效,是因为没有给按钮设置DialogResult,窗体关闭时默认返回DialogResult.None,主代码没有判断这个值,导致后续逻辑依然执行。现在通过明确设置DialogResult,主代码就能准确区分用户是点击了Save还是Cancel。
内容的提问来源于stack exchange,提问作者Bashar
相关产品推荐
相关产品推荐

