【问题标题】:VB 2015: Calculating based on form state, no variablesVB 2015:基于表单状态计算,无变量
【发布时间】:2018-08-20 21:25:26
【问题描述】:

我目前的 VB 作业要求我们构建一个简单的表单(在 Visual Studio 2015 中)用于酒店的租金计算。用户在文本框中输入一个数值,然后根据是否存在的其他因素,当他们单击表单上的按钮执行时,实际租金会显示在标签中。表单上的控件是用于用户输入的文本框或组合框,它们会影响速率。例如,用户可能输入 300 作为基本租金,但如果他们还选中了“早餐”框,他们每晚多支付 15,因此当他们单击到时,输出标签中将显示 315 的租金值执行。

复杂之处在于我们不能使用任何变量。我们只能在用户单击执行时使用表单中存在的值来确定标签中显示的最终值。那么如何在不使用变量的情况下将单击按钮与“查看所有这些复选框和组合框并使用它们修改文本框中的值”的命令联系起来?

我尝试使用 if 语句,但这只会让我每次点击任何东西时数字都会上升。如何使代码仅查看单击按钮时表单所处的确切状态,然后使用该表单状态修改用户已输入的值?

根据要求,这是我的代码,但我的教授说这一切都错了,要彻底重新考虑并重新开始。

Public Class frmJMtest_hl
    Private Sub btnCalcRent_Click(sender As Object, e As EventArgs) Handles btnCalcRent.Click
        If cboBuilding.Text = "High End" Then txtRent.Text = txtRent.Text + 210
        If chkBreakfast.Checked = True Then txtRent.Text = txtRent.Text + 65
        If chkBalcony.Checked = True Then txtRent.Text = txtRent.Text + 120
        If chkNoSmoking.Checked = True Then txtRent.Text = txtRent.Text - 15
        lblResults.Text = txtRent.Text
End Class

【问题讨论】:

  • 您确实需要向我们展示您尝试过的代码,而不是描述它。这样,人们就有机会纠正你的错误。
  • 一方面,由于文本框只能存储文本,不能存储数字,这意味着如果您不能使用 vars,您将有更复杂的表达式将文本转换为数字。另一方面,有什么问题?如果用户在文本框中输入300,无论您的代码在哪里
  • 您是否有附加到ButtonClick 事件的事件处理程序?那将是根据表单控件的状态执行计算的地方。至于如何在不使用变量的情况下保留用户输入的费率值,是否可以只使用单独的只读文本框来显示最终计算的值?
  • 代码添加在上面,对于疏忽感到抱歉,因为我的教授说这都是错误的,我认为这没有帮助。
  • Option Strict On放在你的代码文件的顶部,你会看到代码不会编译。

标签: vb.net winforms


【解决方案1】:

不要根据各种条件修改txtRent,然后将该值复制到lblResults,而是将值复制到lblResults首先,然后根据这些条件修改lblResults

Private Sub btnCalcRent_Click(sender As Object, e As EventArgs) Handles btnCalcRent.Click
    lblResults.Text = txtRent.Text
    If cboBuilding.Text = "High End" Then lblResults.Text = lblResults.Text + 210
    If chkBreakfast.Checked = True Then lblResults.Text = lblResults.Text + 65
    If chkBalcony.Checked = True Then lblResults.Text = lblResults.Text + 120
    If chkNoSmoking.Checked = True Then lblResults.Text = lblResults.Text - 15
End Sub

txtRent 永远不会被修改,因此会保留用户输入的值。

(如果这是 C#,则需要对整数进行一些转换,我不确定上述方法是否适用于 VB.NET,但这只是对所提供代码的修改。)

【讨论】:

  • 非常感谢,培根!这似乎解决了我的问题。没有意识到这一点,我感到非常愚蠢,但我非常感谢您的帮助。
  • @Sinistar 请接受这个答案,并在答案左侧打勾(打勾)。这是感谢 SO 上的发帖人的最佳方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多