【问题标题】:remove and reset button for item list项目列表的删除和重置按钮
【发布时间】:2018-01-07 15:21:13
【问题描述】:

我正在尝试创建一个删除选定项目和重置按钮,该按钮从列表框中删除一个项目并降低标签中该项目的成本。但是,清除按钮会重置成本和项目列表文本,但是当单击按钮再次添加项目时,它会将其添加到文本框中一次,但会带回原始成本以及添加新成本。 Remove selected item 按钮将删除该项目,但不删除该项目的成本金额。我究竟做错了什么?抱歉英语不好。GUI

Option Strict On
Public Class sandwichInterface
Dim DecTotal As Decimal

    Private Sub btnCiabatta_Click(sender As Object, e As EventArgs) Handles btnCiabatta.Click
    ListBox1.Items.Add("1 Ciabatta £1.50")
    ListBox1.Text = ListBox1.Text + ("1 Ciabatta £1.50") + Chr(13)
    DecTotal = DecTotal + CDbl(Microsoft.VisualBasic.Right("1 Ciabatta £1.50", 4))
    lblTotal.Text = "Total £" + Format(DecTotal, "###.00")
End Sub


Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
    ListBox1.Items.Remove(ListBox1.SelectedItem)
    If ListBox1.SelectedItem.Text = "1 Ciabatta £1.50" Then DecTotal = DecTotal - CDbl(Microsoft.VisualBasic.Right("1 Ciabatta £1.50", 4))
    lblTotal.Text = "Total £" + Format(DecTotal, "###.00")
End Sub 

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
    ListBox1.Items.Clear()
    If DecTotal = lblTotal.Text Then lblTotal.Text = "£0.00"

End Sub
End Class

【问题讨论】:

  • 您有问题吗?请阅读How to Ask 并使用tour。您还应该将Option Strict On 放在代码文件的顶部。
  • Re: 编辑 - 发布的代码现在甚至无法编译。使用 Option Strict 您不能将数字与字符串进行比较:If DecTotal = lblTotal.Text。请阅读How to Ask 并转至Tour

标签: vb.net visual-studio


【解决方案1】:

呃,我什至读到这段代码都让我很痛苦,但是就这样吧!

从添加中删除:

ListBox1.Text = ListBox1.Text + ("1 Ciabatta £1.50") + Chr(13)

这2行左右交换,删除后无法查看选中项的值。:

ListBox1.Items.Remove(ListBox1.SelectedItem)
If ListBox1.SelectedItem.Text = "1 Ciabatta £1.50" Then DecTotal = DecTotal - CDbl(Microsoft.VisualBasic.Right("1 Ciabatta £1.50", 4))

通过这个:

If DecTotal = lblTotal.Text Then lblTotal.Text = "£0.00"

我只能猜你的意思

DecTotal = 0
lblTotal.Text = "£0.00"

我也不知道你为什么要这样做:

If ListBox1.SelectedItem.Text = "1 Ciabatta £1.50" Then DecTotal = DecTotal - CDbl(Microsoft.VisualBasic.Right("1 Ciabatta £1.50", 4))

代替:

If ListBox1.SelectedItem.Text = "1 Ciabatta £1.50" Then DecTotal = DecTotal - 1.50

即使后者仍然很糟糕!

不过,您的整个处理方法并不好,将钱作为字符串的一部分传递并使用Microsoft.VisualBasic.RightCdbl 将其转换为浮点数至少可以说是非常糟糕的做法。

【讨论】:

  • 当您对 If ListBox1.SelectedItem.Text 感到疑惑时 = 我对整个 If 语句列表的看法很糟糕,不是在一个循环中,而是每个食物项都有一个。我只希望这是一个学生项目。每次价格发生变化时,都必须有人将整个东西拆开并重新组装起来。
  • 我是编程新手,这是一个学生项目,也是我第一次使用 VB。非常感谢您的反馈!
【解决方案2】:

此代码并不是要粘贴到您的项目中,而是要向您展示如何完成一些事情。我创建了一个简单的类来将对象添加到列表框中。 Button2.Click 显示了如何将项目添加到列表框中。您可能会从 Button 事件中一一添加它们。按钮 2 还显示了如何获得总价。字符串前面的 $ 表示它是一个可以包含变量的插值字符串。 Total 后的 :c 将 Total 格式化为当地货币。 button3.click 显示了如何从列表中删除一个项目并调整总数。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ListBox3.Items.Clear()

        With ListBox3.Items
            .Add(New FoodItem("Ciabatta", 1.5))
            .Add(New FoodItem("Good Bread", 0.5))
            .Add(New FoodItem("Great Bread", 2.0))
        End With
        For Each item As FoodItem In ListBox3.Items
            Total += item.Price
        Next
        lblTotal.Text = $"{Total:c}"
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim SelectedFoodItem As FoodItem = DirectCast(ListBox3.SelectedItem, FoodItem)
        Dim d As Double = SelectedFoodItem.Price
        ListBox3.Items.Remove(ListBox3.SelectedItem)
        Total -= d
        lblTotal.Text = $"{Total:c}"
    End Sub
End Class

Public Class FoodItem
    Public Sub New()
        'Default
    End Sub

    Public Sub New(objFoodName As String, dblPrice As Double)
        FoodName = objFoodName
        Price = dblPrice
    End Sub

    Private _FoodName As String
    Public Property FoodName As String
        Get
            Return _FoodName
        End Get
        Set(value As String)
            _FoodName = value
        End Set
    End Property

    Private _Price As Double
    Public Property Price As Double
        Get
            Return _Price
        End Get
        Set(value As Double)
            _Price = value
        End Set
    End Property

    Public Overrides Function ToString() As String
        Return $"{_FoodName}  {_Price:c}"
    End Function

End Class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    相关资源
    最近更新 更多