0

こんにちは、ファイルから 1 行のテキストを取り込み、ラベルに表示するコードがいくつかあります。ラベルから 8 つの値を合計し、8 で割って平均を取得し、その平均スコアを新しいラベルに表示される文字グレードに変換したいと考えています。助けが必要なコードは btnCal プロシージャルにあります。

これが私のコードです:

   Imports System.IO

   Public Class Form1
    Dim grade As String

    Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click
    Me.Close()

     End Sub

     Private Sub OpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles      OpenToolStripMenuItem.Click

    OFDG1.Filter = "Text Files|*.txt|All Files|*.*"
    Dim myResult As DialogResult
    myResult = OFDG1.ShowDialog
    If myResult = Windows.Forms.DialogResult.OK Then
        Dim strReader As StreamReader = File.OpenText(OFDG1.FileName)
        Dim aline As String
        Do Until strReader.EndOfStream
            aline = strReader.ReadLine
            Dim myStuff() = aline.Split(","c)
            lblStudent.Text = myStuff(0)
            lblClassField.Text = myStuff(1)
            lblSemesterInput.Text = myStuff(2)
            picStudent.Image = Image.FromFile(myStuff(3))
            lblInput1.Text = myStuff(4)
            lblInput2.Text = myStuff(5)
            lblInput3.Text = myStuff(6)
            lblInput4.Text = myStuff(7)
            lblInput5.Text = myStuff(8)
            lblInput6.Text = myStuff(9)
            lblMidtermInput.Text = myStuff(10)
            lblFinalInput.Text = myStuff(11)

        Loop
        strReader.Close()
    Else
        MessageBox.Show("You clicked other than OK")

    End If
End Sub

Private Sub btnCal_Click(sender As Object, e As EventArgs) Handles btnCal.Click

    grade = CStr(CInt(lblInput1.Text + lblInput2.Text + lblInput3.Text _
    + lblInput4.Text + lblInput5.Text + _
    lblInput6.Text + lblMidtermInput.Text + lblFinalInput.Text / 8)

    lblFinalLetterGrade.Text = Calculation(CInt(grade))

End Sub
Public Function Calculation(ByVal grade As Integer) As String
    Select Case grade
        Case Is > 89
            Return "A"
        Case Is > 79
            Return "B"
        Case Is > 69
            Return "C"
        Case Is > 59
            Return "D"
        Case Else
            Return "F"
    End Select
End Function
End Class 
4

1 に答える 1

1

連結と加算を混同しています (+両方に使用でき、適切な型 (整数) を示していない限り、VB.NET は文字列を意味し、単にそれらを連結していると見なします。この種のエラーを回避するために、&連結に使用し、加算だけに使用する方が常に優れてい+ます)、適切なブラケットを配置しないでください(分割は加算の前に考慮されます)。

grade = CStr((CInt(lblInput1.Text) + CInt(lblInput2.Text) + CInt(lblInput3.Text) _
    + Cint(lblInput4.Text) + CInt(lblInput5.Text) + _
    CInt(lblInput6.Text) + CInt(lblMidtermInput.Text) + CInt(lblFinalInput.Text)) / 8)

一般に、コードを適切に構造化するためにもう少し作業する必要があるようです。また、古い VB のかなりの数のメソッドを使用しています (例: CStrCInt)。問題がない場合もあれば、コードが混乱する場合もあります (たとえば、.NET インデックスは常に 0 から始まり、特定の古い関数は 1 から始まります)。一方、VB.NET でプログラミングしているのに、なぜ VB6 コードを使用しているのでしょうか。

于 2013-11-18T17:17:20.423 に答える