2017-12-09 13 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行に表示し、次に別の行を表示するには、情報が表示専用テキストボックス内で異なる場合にもう一度addを押します。私は、異なる机の種類ごとに注文された総机を表示するために注文された異なる数量を追加することさえできません。すべての数値をまとめて表示テキストボックスに1行だけを表示するにはどうすればよいですか?

答えて

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) 

このフォームのLoadイベントがリストにすべてのマネージャを追加する管理者のリストを作成します。マネージャーの保管方法に応じて、希望のコードを含めるか、独自のコードを記述することができます。

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 

あなたは東/西のチェックボックスの選択を変更すると、これらの2つのイベントが[追加]ボタンをクリックすると、コードはすべて、すべての詳細をしている場合、一時的な販売の項目を作成し

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 

答えはあなたの問題をソートする場合は、次の答えにチェックマークをクリックすることを忘れないでください - それは、ユーザが評判ポイントを取得することを確認しますとに同じ問題を抱えている他の誰のためにそれが容易になりますあなたの質問にも彼らのために働くかもしれない受け入れられた答えがあることを見てください。 (そしてその質問に答えた人は評判ポイントをbtwにします)

関連する問題