我正在建立一个学生信息系统,学生可以输入他们的成绩并计算他们的最终成绩。在小组框"项目结果"学生输入50个项目结果,其百分比计算在TextBox1
。
但是,我想要包含适合某些条件的复选框;例如,如果选中checkbox2
,则表示项目提交延迟7天=在最终成绩中扣除10%。我已完成以下代码,但运行时错误为:
从字符串" TrueTrue"转换输入'布尔'无效
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,或者即使有更好的方法来完成我的任务?
答案 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
快一点,因为如果先前的条件证明是错误的话,它不会评估后续条件。
VB
和C++
VB | C++
And | &
AndAlso | &&
注意强>
@James Thorpe的解决方案也有效,但我建议使用AndAlso
。
另见: