使用vb.net解决了对文本框中所有出现的vbCrLf的计数

问题描述 投票:0回答:2

我有一个TextBox,我试图计算所有出现的vbCrLf

计数正在起作用,问题是每次发布vbCrLf时我想从某个整数中减去33。

现在编写的代码仅减去vbCrLf的数字,而不减去数字+ 33。

问题是每次按下Enter键并发出vbCrLf时如何减去33?]] >>

我已经发布了更新的代码问题已得到解答和问题已解决我还添加了其他代码来增强TextBox的管理您将需要这些导入导入System.IO导入System.Text

Public Class frmThree
Dim path As String = "C:/Users/Me/source/repos/TestForms/TestForms/Resource/"
Dim total As Integer
Dim vbLfTotal As Integer
Dim chrPermited As Integer = 333 'chrPermited

Private Sub btnBack_Click(sender As Object, e As EventArgs) Handles btnBack.Click
    Me.Close()
    frmOne.Show()
End Sub

Private Sub tbHaveOne_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbHaveOne.TextChanged
    Dim spaceCount, letterCount, carReturn As Integer
    spaceCount = 0
    letterCount = 0
    carReturn = 0

    Dim str As String = tbHaveOne.Text
    For Each chr As Char In str
        If chr = vbLf Then
            carReturn += 1
        ElseIf Char.IsLetterOrDigit(chr) Then
            letterCount += 1
        ElseIf Char.IsWhiteSpace(chr) Then
            spaceCount += 1
        End If
    Next

    vbLfTotal = carReturn * 29

    total = chrPermited - letterCount - spaceCount - vbLfTotal

    tbHaveTwo.ForeColor = Color.Black
    tbHaveTwo.Text = total & " More Character Can Be Entered"

    While total < 10
        tbHaveTwo.Clear()
        tbHaveTwo.ForeColor = Color.Red
        tbHaveTwo.Text = "Only " & total & " More Character Can Be Entered"
        Exit While
    End While

    If total = 5 Then
        PlaySystemSound()
    End If

    If total < 1 Then
        tbHaveTwo.Clear()
        tbHaveTwo.Text = "No More Data Entry" & total
        Call ansQ()
    End If
End Sub
Sub PlaySystemSound()
    My.Computer.Audio.PlaySystemSound(
    System.Media.SystemSounds.Hand)
End Sub
Public Sub ansQ()
    Const Msg As String = "YES Save Data" + vbCrLf + vbNewLine + "NO CANCEL"
    Const Title As String = "Save or Exit"
    Const Style = vbYesNo + vbQuestion + vbDefaultButton2
    Dim result = MsgBox(Msg, Style, Title)
    If result = vbYes Then
        Call writeDATA()
    ElseIf result = vbNo Then
        'tbHaveOne.ReadOnly = True
        'tbHaveOne.Enabled = False
        tbHaveTwo.Text = "NO Was Selected"
        'result = 0
    End If
    End Sub

Public Shared Sub tbHaveOne_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles tbHaveOne.KeyDown
    'NOTE this Sub is Shared It seems to run all the time like a listener
    If e.KeyCode = Keys.Enter And frmThree.total < 40 Then
        e.SuppressKeyPress = True
    End If
End Sub

我有一个TextBox,我试图计算所有出现的vbCrLf。计数工作正常,问题是每次发出vbCrLf时,我想从某个Integer中减去33。代码...

vb.net textbox counter
2个回答
2
投票

您不能检查当前字符是否为vbcrlf,因为CRLF是两个字符。只需检查LF,这样一来,如果您曾经在unix系统准备的文件上使用逻辑,它仍然可以工作(unix具有LF,Windows具有CRLF)

Private Sub tbHaveOne_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbHaveOne.TextChanged
    Dim spaceCount = 0
    Dim letterCount = 0
    Dim lineCount = 0

    For Each c As Char In tbHaveOne.Text
        If c = vbLf Then
            lineCount += 1
        ElseIf Char.IsLetterOrDigit(c) Then
            letterCount += 1
        ElseIf Char.IsWhiteSpace(c) Then
            spaceCount += 1
        End If
    Next c

    someInteger -= (lineCount * 33)

1
投票

TextBox.Lines.Count返回用换行符分隔的行数(当您按Enter

© www.soinside.com 2019 - 2024. All rights reserved.