0

こんにちは私は6つのチェックボックスを持つプログラムを作成しようとしています。1つをチェックすると、ラベルには俳優の平均が表示されますが、複数のチェックボックスをオンにすると、ラベルにはチェックボックスの平均が最も高くなります。

 Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

    SC = ((Val(425488741) + Val(555909803) + Val(868659354) + Val(966435555) + Val(720388023) + Val(617520987)) / 6)

    If CheckBox1.Checked = True Then

        Label3.Text = "Sean Connery $" & SC

        Exit Sub

    End If

End Sub



Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged

    GL = 513445231

    If CheckBox2.Checked = True Then

        Label3.Text = "George Lazenby $" & GL

        Exit Sub

    End If

End Sub



Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged

    RM = ((Val(785677477) + (426826774) + (666367656)  + (624527272) + (481005579) + (405873493) + (316186616)) / 7)

    If CheckBox3.Checked = True Then

        Label3.Text = "Roger Moore $" & RM

        Exit Sub

    End If

End Sub



Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged

    TD = ((Val(362876056) + (271586451)) / 2)

    If CheckBox4.Checked = True Then

        Label3.Text = "Timothy Dalton $" & TD

        Exit Sub

    End If

End Sub



Private Sub CheckBox5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox5.CheckedChanged

    PB = ((Val(499954330) + (465588535) + (504705882)  + (546490272)) / 4)

    If CheckBox5.Checked = True Then

        Label3.Text = "Pierce Brosnan $" & PB

        Exit Sub

    End If

End Sub



Private Sub CheckBox6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox6.CheckedChanged

    DC = ((Val(640803677) + (586090727)) / 2)

    If CheckBox6.Checked = True Then

        Label3.Text = "Daniel Craig $" & DC

        Exit Sub

    End If

 End Sub
4

2 に答える 2

0

今後、質問する際には、不要な内容をすべて含めないでください。問題を正しく理解している場合、これは考えられる簡単な解決策の1つです。

Dim incomes = New Integer() {100, 2000, 500}
Dim names = New String() {"John", "Tim", "Allan"}

Private Sub CheckedListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
    Dim maxIncome As Integer = 0
    Dim name As String = ""

    For i = 0 To incomes.Length - 1
        If CheckedListBox1.GetItemChecked(i) And incomes(i) > maxIncome Then
            maxIncome = incomes(i)
            name = names(i)
        End If
    Next

    Label1.Text = name & " $" & maxIncome
End Sub

このコードを機能させるには、コレクションに3つのアイテムを含むCheckedListBoxを作成する必要があります。ただし、このアプローチでは、値が多いと非常に悪いコードになる可能性があります。その場合、データベースまたは少なくとも次のような構造を使用する必要があります。

Structure People
    Dim name As String
    Dim income As Integer
    Dim checkBox As CheckBox
End Structure

Exit Subまた、コードのどこにも書き込む必要はなく、何もしません。

于 2012-10-15T23:01:31.480 に答える
0

詳細: Sauliusは、データベースを使用する必要があり、代わりにチェックリストボックスを使用してデータベースを簡単にする必要があるという点で正しいです。ただし、何らかの理由で個別のチェックボックスを使用することを想定しています。

解決:

アクタークラスを作成する

Public Class Actor
   Property Name As String
   Property TotalValue As Double
End Class


あなたのメインフォームで

Public Sub DisplayHighestPaidActor(ByVal actorName As String, ByVal isChecked As Boolean)

    If isChecked Then
        'Add the Actor
        selectedActors.Add((From actor In allActors
                            Where actor.Name = actorName).FirstOrDefault())

        'Order the Actors
        selectedActors = (From actor In selectedActors
                          Order By actor.TotalValue Descending).ToList()
    Else
        'Remove the Actor
        selectedActors.Remove((From actor In allActors
                               Where actor.Name = actorName).FirstOrDefault())

        'Order the Actors
        selectedActors = (From actor In selectedActors
                          Order By actor.TotalValue Descending).ToList()

    End If

    If (selectedActors.Count > 0) Then

        'Display the highest value
        lblHighestPaidActor.Text = selectedActors.Item(0).Name.ToString() _
                          + " $" + selectedActors.Item(0).TotalValue.ToString()
    Else
        lblHighestPaidActor.Text = ""
    End If

End Sub

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

    DisplayHighestPaidActor("Sean Connery", CheckBox1.Checked)

End Sub


Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged

    DisplayHighestPaidActor("George Lazenby", CheckBox2.Checked)

End Sub


Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged

    DisplayHighestPaidActor("Roger Moore", CheckBox3.Checked)

End Sub
于 2012-10-16T12:34:30.470 に答える