簡體   English   中英

在VB.NET中選中多個復選框時,如何顯示復選框的最高平均值?

[英]How do I display the highest average of checkbox when multiple checkboxes checked in VB.NET?

嗨,我正在嘗試制作一個具有6個復選框的程序,當選中一個復選框時,標簽將顯示演員的平均身高,但是如果選中多個,則標簽將僅顯示復選框中的最高平均值。

 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

將來,在提問時,請不要包括所有不必要的細節。 如果正確理解您的問題,這是一種可能的簡單解決方案:

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

為了使此代碼正常工作,您需要創建一個CheckedListBox,其中包含3個項目。 但是,一旦有許多值,此方法可能會導致代碼非常糟糕。 在這種情況下,您應該使用數據庫或至少類似以下的結構:

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

另外,無需在代碼中的任何地方編寫Exit Sub ,它什么也不做。

詳細信息: 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM