首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除多行文本框中的单行代码

删除多行文本框中的单行代码
EN

Stack Overflow用户
提问于 2018-03-21 17:14:44
回答 1查看 253关注 0票数 0

我正在尝试编写一个按钮,当单击该按钮时,将删除多行文本框中的最后一行文本。如果文本框中有两行文本,则可以删除文本的最后一行,但如果文本框中只有一行文本,则会导致错误。

例如:将此内容添加到框中:

代码语言:javascript
复制
line of text 1
line of text 2

使用remove按钮两次,我可以删除这两行文本

但是如果我这样做:将下面这一行添加到文本框中:

代码语言:javascript
复制
line of text 1 

然后尝试删除它,它会出错。

我知道它是错误的,因为我用了两次。

代码语言:javascript
复制
            ' remove box text
        QuoteHistoryBox.Text = QuoteHistoryBox.Text.Remove(QuoteHistoryBox.Text.LastIndexOf(Environment.NewLine))
        QuoteHistoryBox.Text = QuoteHistoryBox.Text.Remove(QuoteHistoryBox.Text.LastIndexOf(Environment.NewLine))

但由于程序的工作方式,这段代码是必须保留的,并且想知道是否有解决办法。

下面是删除最后一个按钮的代码:

代码语言:javascript
复制
    Private Sub Button12_Click(sender As Object, e As EventArgs) Handles RemoveLastBtn.Click
    ' do absolutelty nothing if the box is already empty
    If QuoteHistoryBox.Lines.Count = 1 Or QuoteHistoryBox.Text = "" Then
        QuoteHistoryBox.Text = ""
        FinalQuoteBox.Text = 0
        removeOne = 0
        ' else, remove the last line of text, which would be the last item
    ElseIf removeOne = 0 Then
        ' create a place to store the last line in the texbox
        Dim lastBoxLine As String

        'get the last line in the textbox
        lastBoxLine = QuoteHistoryBox.Lines(QuoteHistoryBox.Lines.Length - 1)

        'if the last line is empt, get the second line instead
        If (lastBoxLine = String.Empty Or lastBoxLine = "") Then
            lastBoxLine = QuoteHistoryBox.Lines(QuoteHistoryBox.Lines.Length - 2)
        End If

        ' compare the gotten line with the number of strings
        ' if the last line matches this string, delete it, and then minus the number associated with this string, or plus if it is the contract string
        If lastBoxLine.Equals("+ Base 3D Printer: $799") Then
            lastNum = 799
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ High-end Printer: $3999") Then
            lastNum = 3999
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ Basic small print: $30") Then
            lastNum = 30
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ Basic medium print: $50") Then
            lastNum = 50
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ Basic large print: $110") Then
            lastNum = 110
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ High quality fdm print: %110") Then
            Dim currentVal As Double = Val(FinalQuoteBox.Text)
            lastNum = currentVal / 210
            lastNum = lastNum * 100
            FinalQuoteBox.Text = lastNum
        ElseIf lastBoxLine.Equals("+ Fdm print using ABS: %20") Then
            Dim currentVal As Double = Val(FinalQuoteBox.Text)
            lastNum = currentVal / 120
            lastNum = lastNum * 100
            FinalQuoteBox.Text = lastNum
        ElseIf lastBoxLine.Equals("+ High quality SLA print: %210") Then
            Dim currentVal As Double = Val(FinalQuoteBox.Text)
            lastNum = currentVal / 310
            lastNum = lastNum * 100
            FinalQuoteBox.Text = lastNum
        ElseIf lastBoxLine.Equals("+ Contract: - %15") Then
            Dim currentVal As Double = Val(FinalQuoteBox.Text)
            lastNum = currentVal / 85
            lastNum = lastNum * 100
            FinalQuoteBox.Text = lastNum
        ElseIf lastBoxLine.Equals("+ Prioritise request: $20") Then
            lastNum = 20
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        End If

        ' remove box text
        QuoteHistoryBox.Text = QuoteHistoryBox.Text.Remove(QuoteHistoryBox.Text.LastIndexOf(Environment.NewLine))
        QuoteHistoryBox.Text = QuoteHistoryBox.Text.Remove(QuoteHistoryBox.Text.LastIndexOf(Environment.NewLine))
        removeOne = removeOne + 1

    Else

        ' create a place to store the last line in the texbox
        Dim lastBoxLine As String

        'get the last line in the textbox
        lastBoxLine = QuoteHistoryBox.Lines(QuoteHistoryBox.Lines.Length - 1)

        'if the last line is empt, get the second line instead
        If (lastBoxLine = String.Empty Or lastBoxLine = "") Then
            lastBoxLine = QuoteHistoryBox.Lines(QuoteHistoryBox.Lines.Length - 2)
        End If

        ' compare the gotten line with the number of strings
        ' if the last line matches this string, delete it, and then minus the number associated with this string, or plus if it is the contract string

        If lastBoxLine.Equals("+ Base 3D Printer: $799") Then
            lastNum = 799
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ High-end Printer: $3999") Then
            lastNum = 3999
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ Basic small print: $30") Then
            lastNum = 30
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ Basic medium print: $50") Then
            lastNum = 50
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ Basic large print: $110") Then
            lastNum = 110
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        ElseIf lastBoxLine.Equals("+ High quality fdm print: %110") Then
            ' correctly gets the old money value before the increase
            Dim currentVal As Double = Val(FinalQuoteBox.Text)
            lastNum = currentVal / 210
            lastNum = lastNum * 100
            FinalQuoteBox.Text = lastNum
        ElseIf lastBoxLine.Equals("+ Fdm print using ABS: %20") Then
            Dim currentVal As Double = Val(FinalQuoteBox.Text)
            lastNum = currentVal / 120
            lastNum = lastNum * 100
            FinalQuoteBox.Text = lastNum
        ElseIf lastBoxLine.Equals("+ High quality SLA print: %210") Then
            Dim currentVal As Double = Val(FinalQuoteBox.Text)
            lastNum = currentVal / 310
            lastNum = lastNum * 100
            FinalQuoteBox.Text = lastNum
        ElseIf lastBoxLine.Equals("+ Contract: - %15") Then
            Dim currentVal As Double = Val(FinalQuoteBox.Text)
            lastNum = currentVal / 85
            lastNum = lastNum * 100
            FinalQuoteBox.Text = lastNum
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) + lastNum
        ElseIf lastBoxLine.Equals("+ Prioritise request: $20") Then
            lastNum = 20
            FinalQuoteBox.Text = Val(FinalQuoteBox.Text) - lastNum
        End If

        QuoteHistoryBox.Text = QuoteHistoryBox.Text.Remove(QuoteHistoryBox.Text.LastIndexOf(Environment.NewLine))
        removeOne = removeOne + 1

    End If

End Sub

都会很感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-03-21 17:25:11

没关系,我已经找到答案了。我只是把它放在try catch块中,并添加了:

代码语言:javascript
复制
Catch ex As ArgumentOutOfRangeException
        QuoteHistoryBox.Text = ""
        FinalQuoteBox.Text = 0
        removeOne = 0
    End Try

来捕捉该行只有一项时的情况,如果它在catch块中,则执行特定的操作。问题解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49402217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档