2017-12-09 8 views
0
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 

이 프로그램을 사용하면 사용자가 지역을 선택한 다음 해당 지역의 관리자를 선택한 다음 책상 유형을 선택한 다음 주문한 책상 수를 선택할 수 있습니다. 모든 정보를 한 줄에 표시하고 다른 줄을 표시하려면 정보가 표시 전용 텍스트 상자에서 다른 경우 다시 누르십시오. 나는 각기 다른 책상 유형에 따라 주문 된 총 책상을 표시하기 위해 주문 된 다른 수량을 추가하기 시작하는 경우조차 없습니다.모든 숫자를 함께 추가하고 표시 텍스트 상자에 한 줄만 표시하는 방법은 무엇입니까?

답변

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 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 

동쪽/서쪽 확인란 선택을 변경할 때

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 

이 두 이벤트는 목록 상자를 다시 채 웁니다 판매 수량을 제외하고는 관리자가 이전에 판매 한 수량과 일치합니다. 그렇다면, 그것은 판매량을 이전 판매량에 더할 것입니다. 이전 판매가 없으면 관리자의 판매 목록에 추가됩니다. 마지막으로 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 

답변이 문제를 정렬하는 경우, 대답 옆에 눈금을 클릭하는 것을 잊지 마세요는 - 그것은 사용자가 명성 포인트를 얻을 수와 같은 문제를 가지고 다른 사람을위한 것이 쉽게 있는지 확인합니다 당신의 질문에는 그들에게도 도움이 될 수있는 대답이 있음을보십시오. (질문에 답변하는 사람이 평판 포인트를 얻습니다.)