-3

「メディアの選択と概算資金」をクリック後、「必要な代理店数」の結果をご確認ください。次に、左側の代理店リストボックスから代理店の名前を選択し、[代理店を追加] をクリックします。「代理店を追加:」ボタンをクリックすると、選択した代理店の名前が代理店リストの隣のリストボックスに表示されます。これが代理店のリストです。左側の代理店リストボックスに入力する必要があります。

U-Ad ($350)、Striker ($190)、NewAd ($250)、Samson ($530)、J & R ($420)、Victory ($120)。

「代理店を追加:」ボタンをクリックすると、計算された見積もりコストの結果が「合計見積もりコスト」の横のテキストボックスに表示されます。たとえば、「U-Ad」と「Samson」を選択した場合、合計見積もり費用は $880.00 になります。[代理店を追加] をクリックすると、結果が表示されます。代理店を追加すると、計算された推定コストが更新されます。

Public Class Form1

Private Sub btnMediaEstimatedFund_Click(sender As Object, e As EventArgs) Handles btnMediaEstimatedFund.Click

    Dim interestRate, balance, initialBalance As Double

    txtBoxEstimatedBudget.Enabled = False
    txtBoxAgenciesNeeded.Enabled = False

    If radButtonTraditional.Checked Then

        txtBoxAgenciesNeeded.Text = 3

    ElseIf radButtonEMedia.Checked Then

        txtBoxAgenciesNeeded.Text = 2

    End If

    If checkBoxSavings.Checked Then

        interestRate = 0.07

    ElseIf checkBoxCorporate.Checked Then

        interestRate = 0.05

    ElseIf checkBoxCorporate.Checked And checkBoxSavings.Checked Then

        interestRate = 0.05 * 0.07

    End If

    initialBalance = InputBox("Please Enter a balance between $500.00 and $3000.00")

    If initialBalance > 3000 Then

        InputBox("Please enter a number equal to or below $3000.00 and no less than $500.00")

    ElseIf initialBalance < 500 Then

        InputBox("Please enter a number equal to or above $500.00 and no more than $3000.00")

    Else

        balance = initialBalance * (1 + interestRate)
        txtBoxEstimatedBudget.Text = balance

    End If

End Sub


Private Sub btnAddAgencies_Click(sender As Object, e As EventArgs) Handles btnAddAgencies.Click

    Dim dict As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)()
    dict.Add("U-Ad", 350)
    dict.Add("Striker", 190)
    dict.Add("New Ad", 250)
    dict.Add("Samson", 530)
    dict.Add("J & R", 420)
    dict.Add("Victory", 120)

    Dim selectedItems = (From i In lstBoxAgenciesList.SelectedItems).ToArray()
    Dim total As Integer = 0

    For Each selectedItem In selectedItems

        lstBoxSelectedList.Items.Add(selectedItem)
        lstBoxAgenciesList.Items.Remove(selectedItem)

        total += dict(selectedItem)

    Next

    txtBoxEstimatedCost.Text = total.ToString()

End Sub

Private Sub btnGenerateReport_Click(sender As Object, e As EventArgs) Handles btnGenerateReport.Click

    Dim employeeLevel, year, selectedMedia, numberOfAgencies As String
    Dim today As Date

    today = CStr(dtpToday.Text)
    Name = CStr(txtBoxCreator.Text)
    employeeLevel = CStr(lstBoxResults.Text)
    year = CStr(lstBoxResults.Text)
    selectedMedia = CStr(lstBoxResults.Text)
    numberOfAgencies = CStr(txtBoxAgenciesNeeded.Text)

    dtpToday.Text = FormatDateTime(today, DateFormat.ShortDate)

    If radButtonManager.Checked Then

        employeeLevel = "Manager"

    ElseIf radButtonStaff.Checked Then

        employeeLevel = "Staff"

    End If

    If radButton2015.Checked Then

        year = "2015"

    ElseIf radButton2016.Checked Then

        year = "2016"

    ElseIf radButton2017.Checked Then

        year = "2017"

    End If

    If radButtonTraditional.Checked Then

        selectedMedia = "Traditional Media (TV, Radio)"

    ElseIf radButtonEMedia.Checked Then

        selectedMedia = "New e-Media (SNS, e-Mail)"

    End If

    lstBoxResults.Items.Add("=======================================")
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Date : " & today)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Reporting Entity : " & Name)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Level of Employee :  " & employeeLevel)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("=======================================")
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Year" & " " & year & " " & "Budget of Advertising Report")
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("=======================================")
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Total Estimated Cost : " & FormatCurrency(txtBoxEstimatedCost.Text))
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Total Estimated Budget : " & FormatCurrency(txtBoxEstimatedBudget.Text))
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Selected Media : " & selectedMedia)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Number of Agencies Involved : " & numberOfAgencies)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("=======================================")

End Sub

クラス終了

改訂されたコード!

4

2 に答える 2

2

私は配列よりもList(Of T)を好みます。Double型が必要とは思われなかったので、整数を使用しました。

Dim myList As New List(Of Integer)
myList.Add(350)' etc...
'add the items
Dim total as Integer = myList.Sum()
于 2013-03-23T03:34:11.080 に答える
1

これはWindowsフォームですか?少しの作業でWebFormsコンテキストに転送できるとはいえ、そうだと仮定して作業します。

ListBoxは文字列でいっぱいだと思います。もしそうなら、あなたは次のようなものを設定することができます:

    Dim dict As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)()
    dict.Add("U-AD ($350)", 350)
    dict.Add("Striker ($190)", 190)
    dict.Add("New Ad ($250)", 250)
    dict.Add("Samson ($530)", 530)
    dict.Add("J & R ($420)", 420)
    dict.Add("Victory ($120)", 120)

ところで、辞書は知っておくべき素晴らしいコレクションです。

次に、現在のコードの代わりに、次のようなことを行うことができます。

Dim selectedItems = (From i In lstBoxAgenciesList.SelectedItems).ToArray()
Dim total As Integer = 0

For Each selectedItem In selectedItems
    lstBoxSelectedList.Items.Add(selectedItem)
    lstBoxAgenciesList.Items.Remove(selectedItem)
Next

For Each item in lstBoxSelectedList.Items
    total += dict(item)
Next

txtBoxEstimatedCost.Text = total.ToString();

リスト全体を追加しようとするのではなく、辞書から追加するものをチェリーピックするコードとの違いに注意してください(これが何While (p < list.Length())をするかです)。Textまた、のを1回割り当てるだけですがtxtBoxEstimatedCost、ループでは反復ごとに更新されます。これは、最終的な値のみを表示する必要があるため、おそらく必要ありません。

これはこれを行うための最良の方法ではないことに注意してください。DisplayMemberプロパティとValueMemberプロパティを使用して、このような例に従う方がよい場合があります。

これにより、文字列だけでなく、より複雑な型(つまり、作成するクラス)を追加する必要があるため、リストへの追加が少し難しくなりますが、長期的には、より良いアプローチだと思います。

于 2013-03-23T03:41:32.443 に答える