【问题标题】:Read from txt file and using Public Function从 txt 文件中读取并使用公共函数
【发布时间】:2013-11-18 17:08:43
【问题描述】:

大家好,我这里有一些代码可以从文件中引入一行文本并显示到标签中。我想将标签中的八个值相加并除以 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 

【问题讨论】:

  • 问题错误是什么?你能比“需要帮助”更具体吗?
  • 我不断收到的错误是它说我除以零。
  • @Plutonix 我将所有标签加在一起,然后除以标签总数,即 8。
  • 不,你不是。您正在连接标签的内容。例如:“1”+“2”+“3”=“123”

标签: vb.net function visual-studio-2012 option-strict


【解决方案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 代码呢?

【讨论】:

  • 每个项目都遵守 option strict on 和 option infer on... 至少这是我设置机器的方式
  • @user2872778 抱歉,我更正了这一点。我误解(正如你所做的那样)执行了字符串之间的加法(Strict On 不允许这样做);但实际上,.NET 假定您想要连接,因此不会触发任何错误。无论如何......在这段代码中有很多事情需要纠正。在任何情况下,您都可以更正成绩(我知道您在寻找什么)。
  • 所以我必须在使用字符串时将每个标签转换为每个标签的 CInt?
  • @user2872778 不是每个标签,所有东西。您必须始终执行转换为正确的类型。实际上,这就是 Option Strict On 的用途:迫使您始终进行转换;这种情况(其中 + 可以用两种不同的方式理解)非常特殊; Strict On 不允许您进行正确转换的大多数情况。
猜你喜欢
  • 2017-10-12
  • 2016-05-03
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多