2016-03-22 10 views
0

私は学生が結果を入力して全体の最終的な成績を計算することができる学生情報システムを作っています。 「プロジェクト結果」のグループボックスには、50のうちプロジェクト結果を入力し、その割合はTextBox1で計算されます。文字列をブール値に変換します.net

ただし、特定の条件に合うようにチェックボックスを含めたいと思います。例: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 

ではありませんブール値を文字列に変換する方法、または自分のタスクを完了する方法がより優れているのかどうかは疑問です。

+2

あなたは 'オプション厳格on'のを切り替えると、これはコンパイルされませんよう、あなたがすぐにあなたのエラーが表示されます。それはあなたにポインタを与える必要があります –

+0

こんにちは、誰かの答えがあなたのために働く場合は、その隣のチェックマークをクリックしてください。 - ソリューションを探している他のユーザーに役立ちます。彼らは、質問に対する答えが受け入れられ、それらのために働くかもしれないことを見ることができます。もちろん、質問に答えた人は評判を得ます - そして(@ JamesThorpeのおかげで)あなたも受け入れるために2人の担当者を得ます。 –

答えて

3

CheckBox2.Checkedは、です。すでにブール値です。最後にToStringを追加すると、強制的に文字列になります。これは、文字列連結演算子である&と組み合わせると、"TrueTrue"になってしまうのです。何が欲しいのはこれです:

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

サイドノート:あなたは、ユーザーが唯一の(何かが同時に例えば、時間と後期にすることはできません)それらのいずれかを選択しなければならないことが暗示していチェックボックス - ラジオボタンは、ここでより良いUI選択肢になります。

+0

私はラジオボタンにチェックボックスを変更しました。 – MLL

0

あなたは

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

に行を変更したり、

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

なぜで速く確認する必要がありますか?

VBAnd代わりに&使用しAndAlso代わりに&&使用します。

VBの& Operatorは、文字列の連結を強制するために使用されます。

だから、ライン If IsNumeric(TextBox3.Text) & CheckBox2.Checked.ToString Then(両方がtrueの場合)

If True & True Then

に等しく、Booleanの種類Stringからの自動変換が存在しないのでIf "TrueTrue" Then

になるので、例外がスローされます。

AndAlsoを使用すると、Andを使用するよりも少し早くなります。これは、以前の条件が偽と判断した場合、後続の条件を評価しないためです。

比較VB間とC++

VB  | C++ 
And  | & 
AndAlso | && 

@Jamesソープのソリューションは、あまりにも動作しますが、私はAndAlsoを使用することをお勧め。

も参照してください:

Which is better for performance? And vs AndAlso

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

+0

パフォーマンスについては正しいですが、何かが1回の計算で1回しか実行されず、 'IsNumeric'の後に実行され、何か複雑な処理をするよりもブール値のプロパティをチェックするだけの場合は、パフォーマンスの違いは決してここで心配する価値があることはありません。 –

+1

@JamesThorpeはい、でもプログラマーが気づくべきだと思います。 [this](http://stackoverflow.com/questions/4014535/differences-in-boolean-operators-vs-and-vs)記事を参照してください。 – J3soon

+1

もちろん、私はちょっと心配する価値はないと言っています。あなたの答えには良い補足物ですが、あなたの答えを改善するものはOPがそのコード行を変更する必要があるという理由で説明することでしょう。あなたは「なぜこれをやればいいのか」ということなく「実際に問題を説明する」ことなく「これを行うべき」からまっすぐ行ってきました。 –

関連する問題