VB.NET:如何在Confirm按钮调用BtnAddOrder的AmountPayable变量?
解决VB.NET跨方法访问变量的问题
问题原因
你在BtnAddOrder_Click方法内用Dim AmountPayable As Double声明的变量是局部变量,仅能在当前方法内部使用,BtnConfirm_Click方法无法访问这个变量,因此会提示“未声明”。
简单解决步骤
要让两个方法都能访问AmountPayable,只需将它从方法内部的局部变量,改为类级别的私有字段:
- 在类的最顶部(所有
Sub方法外面)添加变量声明:
Private AmountPayable As Double
- 删除
BtnAddOrder_Click里的Dim AmountPayable As Double这一行(已在类级别声明,无需重复定义) - 此时
BtnConfirm_Click方法即可直接使用AmountPayable变量
修改后的完整代码示例
Public Class YourFormName ' 替换为你的窗体类名 ' 类级别私有字段,类内所有方法均可访问 Private AmountPayable As Double Private Sub BtnAddOrder_Click(sender As Object, e As EventArgs) Handles BtnAddOrder.Click Dim AddOns As String Dim BlackPearl As String Dim Oreo As String Dim Nata As String Dim CoffeeJelly As String Dim CreamCheese As String AddOns = " " BlackPearl = " " Oreo = " " Nata = " " CoffeeJelly = " " CreamCheese = " " If ChkBoxBlackPearl.Checked = True Then AddOns = "Black Pearl" End If If ChkBoxOreo.Checked = True Then AddOns = AddOns & "," & " Oreo" End If If ChkBoxNata.Checked = True Then AddOns = AddOns & "," & " Nata De Coco" End If If ChkBoxCoffeeJelly.Checked = True Then AddOns = AddOns & "," & " Coffee Jelly" End If If ChkboxCreamCheese.Checked = True Then AddOns = AddOns & "," & " CreamCheese" End If Dim Payment As String Payment = " " If RbtnGcash.Checked = True Then Payment = "Gcash" End If If RbtnDebit.Checked = True Then Payment = "Debit Card" End If If RbtnCoins.Checked = True Then Payment = "Coins.ph" End If If RbtnCash.Checked = True Then Payment = "Cash" End If Dim DiscountRate As Double If RbtnPWD.Checked = True Then DiscountRate = 0.05 End If If RbtnSenior.Checked = True Then DiscountRate = 0.1 End If If RbtnStudent.Checked = True Then DiscountRate = 0.03 End If If RbtnDiscountNone.Checked = True Then DiscountRate = 0 End If Dim Transaction As String Transaction = " " If RbtnDelivery.Checked = True Then Transaction = "15" End If If RbtnWalkin.Checked = True Then Transaction = "None" End If TxtTotalAddOn.Text = Val(TxtBlackPearl.Text) + Val(TxtOreo.Text) + Val(TxtNataDeCoco.Text) + Val(TxtCoffeeJelly.Text) + Val(TxtCreamCheese.Text) Dim Total As Integer Dim DiscountPrice As Double Total = Val(TxtTotalAddOn.Text) + Val(TxtSizeprice.Text) + Val(TxtDeliveryFee.Text) DiscountPrice = Total * DiscountRate AmountPayable = (Total - DiscountPrice) * Val(ComboQuantity.Text) If AddOns.Length <> 0 Then MessageBox.Show("********************************" + vbCr + "Troo Tea Ordering System" + vbCr + "********************************" + vbCr + "Choosen DRINK: " + ComboDrink.Text + vbCr + "********************************" + vbCr + "Quantity: " + ComboQuantity.Text + vbCr + "********************************" + vbCr + "Size: " + Sizename + vbCr + "********************************" + vbCr + "Price " + TxtSizeprice.Text + vbCr + "********************************" + vbCr + "AddOns: " + AddOns + vbCr + "********************************" + vbCr + "Total AddOns " + TxtTotalAddOn.Text + vbCr + "********************************" + vbCr + "Delivery Fee" + TxtDeliveryFee.Text + vbCr + "********************************" + vbCr + "Discount " + TxtDiscount.Text + vbCr + "Total " + Total.ToString + vbCr + "Amount Payable: " + AmountPayable.ToString + vbCr + "********************************" + vbCr + "*******************" + vbCrLf + "Thank You For Your Order" + vbCrLf + "*******************") End If TxtOrderDetails.Text = ("Customer Name: " + TxtCustomername.Text + vbCrLf + "Phone Number: " + TxtPhone.Text + vbCrLf + "Address: " + TxtAddress.Text + vbCrLf + "***********************************************************" + vbCrLf + "Choosen DRINK: " + ComboDrink.Text + vbCrLf + "Quantity: " + ComboQuantity.Text + vbCrLf + "Size: " + Sizename + vbCrLf + "Price: " + TxtSizeprice.Text + vbCrLf + "AddOns: " + AddOns + vbCrLf + "Total AddOns: " + TxtTotalAddOn.Text + vbCrLf + "Delivery Fee: " + TxtDeliveryFee.Text + vbCrLf + "Mode Of Payment: " + Payment + vbCrLf + "Discount Rate for Each Order: " + TxtDiscount.Text + vbCrLf + "Total Price Per Order: " + Total.ToString + vbCrLf + "Amount Payable: " + AmountPayable.ToString + vbCrLf + "***********************************************************" + vbCrLf + "Thank You For Your Order" + vbCrLf + "***********************************************************" + vbCrLf + "Date Of Transaction: " + DateTimePicker1.Text) End Sub Private Sub BtnConfirm_Click(sender As Object, e As EventArgs) Handles BtnConfirm.Click ' 示例:使用AmountPayable变量 MessageBox.Show("确认支付金额:" & AmountPayable.ToString("C")) End Sub End Class
额外提示
- 类级别字段默认初始值为0.0,若担心用户直接点击
BtnConfirm导致金额无效,可在该方法内添加判断:If AmountPayable <= 0 Then MessageBox.Show("请先添加订单计算金额")
内容的提问来源于stack exchange,提问作者Johane Grei Wall
相关产品推荐
相关产品推荐

