Case语句不使用String Literals

时间:2015-03-16 15:07:32

标签: vb.net

大家好我正在尝试学习VB,并且遇到了一些我正在使用的代码。我希望我的程序输出一个特定的数字,如果使用case语句检查复选框,但我的代码不起作用。

Public Class frmBTPW

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btncalc.Click
    Dim dblhdr As Double
    Dim dblfdr As Double
    Dim dbltdr As Double

    dblhdr = 24
    dblfdr = 35
    dbltdr = 50

    Select Case "Power Wash Rental"
        Case "Half Day Rental"

            If chkhd.Checked = True Then
                txtrc.Text = "poop"

            End If


        Case "Full Day Rental"

            If chkFD.Checked = True Then
                txtrc.Text = dblfdr

            End If
    End Select





End Sub

Private Function Button1_Click() As CheckBox
    Throw New NotImplementedException
End Function

End Class

非常感谢帮助。我的代码没有在文本框中输出任何内容。

4 个答案:

答案 0 :(得分:1)

除了案例陈述之外,我认为你应该阅读文字值和变量之间的区别。 “Power Wash Rental”只不过是一系列字符,AKA是一个字符串:(在这种情况下“P”后跟“o”等)同样,“Half Day Rental”是一系列字符,“H”跟随通过“a”等。)

“Power Wash Rental”是一个文字字符串。 “半日租赁”也是如此,当然它们永远不会匹配。

鉴于:

Dim A as string
A = TextBox1.text

现在,A是一个变量。它是一个字符串,包含在文本框中输入的任何字符系列(文本)。

答案 1 :(得分:1)

这是一种简单的方法。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   chkhd.tag = 24 ' store values in the check boxes
   chkfd.tag = 35 ' using the tag property 
   chktd.tag = 50 ' and later add up the values
End Sub 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btncalc.Click
   dim total as double = 0
   total += IF(chkhd.checked, cdbl(chkhd.tag), 0)
   total += IF(chkfd.checked, cdbl(chkfd.tag), 0)
   total += IF(chktd.checked, cdbl(chktd.tag), 0)
   msgbox(total)
End Sub

但是,我认为您可能需要单选按钮而不是复选框。 可以检查复选框。单选按钮一次只能有一个。

此解决方案允许您使用复选框保留价格 - 您可以在表单设计器中执行此操作,而不是使用表单加载。

答案 2 :(得分:0)

我建议您阅读Case Statements。目前,使用字符串时,您将永远不会到达任何地方。你也不需要这个案例...另外如果第一个条件是真的而最后一个条件也是如此,最后一个条件用于设置文本,不知道你是否有这个有没有理由?

 If chkhd.Checked = True Then
   txtrc.Text = "poop"
 End If
 If chkFD.Checked = True Then
   txtrc.Text = dblfdr
 End If

答案 3 :(得分:0)

正如其他人所说的那样,您的Case语句不起作用,因为您使用字符串文字将"Power Wash Rental""Half Day Rental"进行比较,这将始终为false。 Plutonix was also correct说应该使用租约期限ComboBox。不存在的唯一原因是,如果您计算累计租赁天数/金额;但是在这种情况下,你应该使用某种NumericUpDown作为你的乘数与持续时间。

这是一个可以帮助您入门的示例。您可以将结构化为一种键控集合,或者使其成为字典对象的包装类,这样可以更容易地在代码中使用。以下内容可能与您的项目无法完全即插即用,但它应该有助于您了解如何处理这种情况。

Option Strict On
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.ComboBox1.Items.AddRange({PowerWashRentals.halfDayText, PowerWashRentals.FullDayText, PowerWashRentals.TwoDayText})
        AddHandler ComboBox1.SelectedValueChanged, AddressOf Me.ComboBox1_SelectedChanged    
    End Sub

    Private Sub ComboBox1_SelectedChanged(sender As Object, e As EventArgs)
        Dim cBox As ComboBox = DirectCast(sender, ComboBox)

        Select Case cBox.SelectedItem.ToString
            Case PowerWashRentals.halfDayText
                Label1.Text = PowerWashRentals.HalfDayPrice.ToString
            Case PowerWashRentals.FullDayText
                Label1.Text = PowerWashRentals.FullDayPrice.ToString
            Case PowerWashRentals.TwoDayText
                Label1.Text = PowerWashRentals.TwoDayPrice.ToString
        End Select
    End Sub
End Class

Public Structure PowerWashRentals
    Public Const HalfDayPrice As Double = 24
    Public Const FullDayPrice As Double = 35
    Public Const TwoDayPrice As Double = 50

    Public Const halfDayText As String = "Half Day Rental"
    Public Const FullDayText As String = "Full Day Rental"
    Public Const TwoDayText As String = "Two Day Rental"
End Structure