将字符串转换为布尔值.net

时间:2016-03-22 13:38:52

标签: vb.net visual-studio checkbox boolean-expression

我正在建立一个学生信息系统,学生可以输入他们的成绩并计算他们的最终成绩。在小组框"项目结果"学生输入50个项目结果,其百分比计算在TextBox1

但是,我想要包含适合某些条件的复选框;例如,如果选中checkbox2,则表示项目提交延迟7天=在最终成绩中扣除10%。我已完成以下代码,但运行时错误为:

  

从字符串" TrueTrue"转换输入'布尔'无效

enter image description here

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim a As Integer
    Dim b As Decimal

    If IsNumeric(TextBox3.Text) & CheckBox2.Checked.ToString Then
        If TextBox3.Text <= 20 Then
            a = (TextBox3.Text * 100) / 20
            TextBox4.Text = a
            b = a * 0.1 - 0.1

            TextBox5.Text = CDec(b)




        Else
            MsgBox("Please Enter value equal to 20 and below!")
        End If
    End If

我想知道如何将布尔值转换为String,或者即使有更好的方法来完成我的任务?

2 个答案:

答案 0 :(得分:4)

CheckBox2.Checked 已经一个布尔值。当你在最后添加ToString时,你强迫它成为一个字符串。这与字符串连接运算符之前的&相结合,就是为什么你最终得到"TrueTrue"。你想要的是这个:

If IsNumeric(TextBox3.Text) And CheckBox2.Checked Then

旁注:你在那里的复选框暗示用户应该只选择其中一个(例如,某些东西不能同时按时和迟到) - 单选按钮在这里是一个更好的UI选择。

答案 1 :(得分:0)

您应该将行更改为

If IsNumeric(TextBox3.Text) And CheckBox2.Checked Then

或使用

更快地检查
If IsNumeric(TextBox3.Text) AndAlso CheckBox2.Checked Then

<强>为什么吗

VB使用And代替&并使用AndAlso代替&&

VB中的& Operator用于强制字符串连接。

所以行If IsNumeric(TextBox3.Text) & CheckBox2.Checked.ToString Then(如果两者都是真的那样)

等于If True & True Then

成为If "TrueTrue" Then

由于没有从String类型到Boolean的自动转换,因此抛出了异常。

使用AndAlso会比使用And快一点,因为如果先前的条件证明是错误的话,它不会评估后续条件。

VBC++

之间的比较
VB      | C++
And     | &
AndAlso | &&

注意

@James Thorpe的解决方案也有效,但我建议使用AndAlso

另见:

Which is better for performance? And vs AndAlso

Differences in boolean operators: & vs && and | vs ||