【问题标题】:how to add all the numbers together and only display one line in a display text box?如何将所有数字相加并在显示文本框中仅显示一行?
【发布时间】:2017-12-10 02:14:42
【问题描述】:
Option Explicit On
Option Strict On
Option Infer Off
Public Class Form1

    Private strDeskSold(3) As String

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        Dim intQtySold As Integer

        If rbtnEast.Checked Then
            strDeskSold(0) = "East"
        Else
            strDeskSold(0) = "West"
        End If

        If rbtnLarge.Checked Then
            strDeskSold(1) = "Large L Shape"
        ElseIf rbtnSmall.Checked Then
            strDeskSold(1) = "Small L Shape"
        ElseIf rbtnExec.Checked Then
            strDeskSold(1) = "Executive"
        Else
            strDeskSold(1) = "Presidential"
        End If

        If rbtnEast.Checked Then
            If lstBoxManagers.Text = "Anna Banes" Then
                strDeskSold(2) = "Anna Banes"
            ElseIf lstBoxManagers.Text = "Charlie Deer" Then
                strDeskSold(2) = "Charlie Deer"
            End If
        End If

        If rbtnWest.Checked Then
            If lstBoxManagers.Text = "Dan Easom" Then
                strDeskSold(2) = "Dan Easom"
            ElseIf lstBoxManagers.Text = "Fran Granger" Then
                strDeskSold(2) = "Fran Granger"
            ElseIf lstBoxManagers.Text = "Hamp Ideal" Then
                strDeskSold(2) = "Hamp Ideal"
            End If
        End If

        Integer.TryParse(txtNumberSold.Text, intQtySold)

        strDeskSold(3) = intQtySold.ToString
        txtDisplay.Text = txtDisplay.Text & strDeskSold(0) & ControlChars.Tab & strDeskSold(1) & ControlChars.Tab & strDeskSold(2) & ControlChars.Tab & strDeskSold(3) & ControlChars.NewLine
    End Sub

该程序允许用户选择一个区域,然后是该区域的经理,然后是办公桌类型,然后是订购的办公桌数量。如果仅显示文本框中的信息不同,我想在一行中显示所有信息,然后在他们再次按添加时显示另一行。我什至不知道从哪里开始添加订购的不同数量以显示已为每种不同办公桌类型订购的办公桌总数。

【问题讨论】:

    标签: vb.net visual-studio-2015


    【解决方案1】:

    如果我是对的,您希望为每个添加的销售显示单独的行,除非同一项目由同一经理销售。在这种情况下,您想将最后的销售量添加到列表中的现有销售量中吗?

    在这种情况下,你需要采取一种稍微不同的方式..


    像这样创建一个销售类

    Private Class Sale
        Public Property Item As String
        Public Property Quantity As Integer
        Public Property ManagerName As String
    End Class
    

    还有这样的经理班。每个经理都有自己的销售清单。

    Private Class Manager
        Public Property Name As String
        Public Property Region As String
        Public Property Sales As New List(Of Sale)
    End Class
    

    并创建经理列表

    Dim Managers As New List(Of Manager)
    

    此表单加载事件会将所有经理添加到列表中。您可以根据需要包含它或编写自己的代码,具体取决于您存储管理器的方式。

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim manager1 As New Manager With {.Name = "Anna Barnes", .Region = "West"}
        Dim manager2 As New Manager With {.Name = "Charlie Deer", .Region = "West"}
        Dim manager3 As New Manager With {.Name = "Dan Easom", .Region = "East"}
        Dim manager4 As New Manager With {.Name = "Fran Granger", .Region = "East"}
        Dim manager5 As New Manager With {.Name = "Hamp Ideal", .Region = "East"}
        Managers = New List(Of Manager) From {manager1, manager2, manager3, manager4, manager5}
    End Sub
    

    当您更改东/西复选框选择时,这两个事件会重新填充 ListBox

    Private Sub RbtnEast_CheckedChanged(sender As Object, e As EventArgs) Handles RbtnEast.CheckedChanged
        If RbtnEast.Checked Then
            lstBoxManagers.DataSource = Managers.FindAll(Function(x) x.Region = "East").ToArray
            lstBoxManagers.DisplayMember = "Name"
            lstBoxManagers.Update()
        End If
    End Sub
    
    Private Sub RbtnWest_CheckedChanged(sender As Object, e As EventArgs) Handles RbtnWest.CheckedChanged
        If RbtnWest.Checked Then
            lstBoxManagers.DataSource = Managers.FindAll(Function(x) x.Region = "West").ToArray
            lstBoxManagers.DisplayMember = "Name"
            lstBoxManagers.Update()
        End If
    End Sub
    

    当您单击添加按钮时,代码会创建一个包含所有详细信息的临时销售项目,并且除了销售数量之外的所有内容都与经理之前的销售相匹配。如果是这样,它将将该销售的数量添加到前一个销售中。如果没有以前的销售,它将被添加到经理的销售列表中。最后,richTextBox 被更新以显示每个经理的每个项目的总销售额。

    Private Sub BtnAdd_Click(sender As Object, e As EventArgs) Handles BtnAdd.Click
        Dim tempSale As New Sale
        If rbtnLarge.Checked Then
            tempSale.Item = "Large L Shape"
        ElseIf rbtnSmall.Checked Then
            tempSale.Item = "Small L Shape"
        ElseIf rbtnExec.Checked Then
            tempSale.Item = "Executive"
        Else
            tempSale.Item = "Presidential"
        End If
        Integer.TryParse(TxtNumberSold.Text, tempSale.Quantity)
        Dim mgr As Manager = Managers.Find(Function(x) x.Name = CType(lstBoxManagers.SelectedItem, Manager).Name)
        'If Not IsNothing(mgr.Sales) Then
        Dim matchingSale As Sale = mgr.Sales.Find(Function(x) x.Item = tempSale.Item)
        If Not IsNothing(matchingSale) Then
            matchingSale.Quantity += tempSale.Quantity
        Else
            mgr.Sales.Add(tempSale)
        End If
        UpdateSalesTextBox()
    End Sub
    

    这是更新代码。它遍历所有经理及其销售的每件独特商品的所有销售总额。

    Private Sub UpdateSalesTextBox()
        rtbDisplay.SuspendLayout()
        rtbDisplay.Clear()
        For Each mgr As Manager In Managers
            For Each [sale] As Sale In mgr.Sales
                rtbDisplay.AppendText(mgr.Region & vbTab & [sale].Item & vbTab & mgr.Name & vbTab & [sale].Quantity & vbCrLf)
            Next
        Next
        rtbDisplay.ResumeLayout()
    End Sub
    

    如果某个答案解决了您的问题,请不要忘记单击答案旁边的勾号 - 它可以确保用户获得声誉积分,并让遇到相同问题的其他人更容易看到您的问题有一个可接受的答案,也可能对他们有用。 (顺便说一句,回答问题的人会获得声誉积分)

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多