VB中如何从自定义类中将变量值写入窗体文本框
问题原因
- VB.NET中方法参数默认是
ByVal(按值传递),你传入的txttotal.Text是字符串类型的值副本,在OrderTotal方法内修改total参数的操作只会修改本地临时变量,完全不会回写到窗体的文本框属性上,所以界面看不到变化。 - 原方法中
total = fullamount写在循环内部,属于冗余操作,只需要循环结束计算完总金额后赋值一次即可。 - 业务类直接操作UI控件属于强耦合设计,本身也不符合代码分层规范。
最优解决方案:改为返回值的Function实现
这种方案把计算逻辑和UI操作分离,order类只需要负责计算总额,不需要关心结果要赋值给哪个控件,复用性更强。
修改后的order类方法代码:
Public Function OrderTotal() As Decimal Dim fullamount As Decimal = 0 For Each item As MenuItem In Items fullamount += CDec(item.Cost) Next Return fullamount End Function
修改后的调用代码:
Dim order1 As New order order1.AddItem(menuItem) ' 直接拿到返回值赋值给文本框即可,还可以按需格式化,比如.ToString("C")转为货币格式 txttotal.Text = order1.OrderTotal().ToString()
其他可实现但不推荐的方案
如果一定要用Sub实现,可以把参数改为ByRef(按引用传递),但这种写法耦合度高,不建议在正式项目中使用:
' 方法定义加ByRef关键字 Public Sub OrderTotal(ByRef total As String) Dim fullamount As Decimal = 0 For Each item As MenuItem In Items fullamount += CDec(item.Cost) Next total = fullamount.ToString() End Sub
内容的提问来源于stack exchange,提问作者Hamza Asim
相关产品推荐
相关产品推荐

