Отображение сообщения на основе различных комбинаций флажков - PullRequest
0 голосов
/ 25 октября 2019

У нас есть серия из 10 флажков. Мы пытаемся получить сообщение для отображения в зависимости от серии выбранных флажков. Однако наша проблема заключается в том, что при нажатии кнопки отображаются все возможные комбинации.

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If CheckBox1.Checked = True And CheckBox6.Checked = True Then MessageBox.Show("On Campus Student Center")
        If CheckBox1.Checked = True And CheckBox7.Checked = True Then MessageBox.Show("On Campus Marketplace")
        If CheckBox1.Checked = True And CheckBox8.Checked = True Then MessageBox.Show("Around Campus")
        If CheckBox2.Checked = True And CheckBox3.Checked = True And CheckBox9.Checked = True Then MessageBox.Show("2 Mile Restaurant")
        If CheckBox2.Checked = True And CheckBox3.Checked = True And CheckBox10.Checked = True Then MessageBox.Show("2 Mile FF")
        If CheckBox2.Checked = True And CheckBox4.Checked = True And CheckBox9.Checked = True Then MessageBox.Show("3 Mile Restaurant")
        If CheckBox2.Checked = True And CheckBox4.Checked = True And CheckBox10.Checked = True Then MessageBox.Show("3 Mile FF")
        If CheckBox2.Checked = True And CheckBox5.Checked = True And CheckBox9.Checked = True Then MessageBox.Show("4 Mile Restaurant")
        If CheckBox2.Checked = True And CheckBox5.Checked = True And CheckBox10.Checked = True Then MessageBox.Show("4 Mile FF")
        If CheckBox1.Checked = True And CheckBox6.Checked = True And CheckBox7.Checked = True And CheckBox8.Checked = True Then MessageBox.Show("All On Campus")
        If CheckBox1.Checked = True And CheckBox6.Checked = True And CheckBox7.Checked = True Then MessageBox.Show("Student Center and Marketplace")
        If CheckBox1.Checked = True And CheckBox6.Checked = True And CheckBox8.Checked = True Then MessageBox.Show("Student Center and Around Campus")
        If CheckBox1.Checked = True And CheckBox8.Checked = True And CheckBox7.Checked = True Then MessageBox.Show("Market Place and around")
    End Sub
End Class

Например, если мы следим за выбором флажка последнего оператора. Флажки 1,7 и 8. Мы получаем следующие сообщения:

  • "На территории кампуса"
  • "Вокруг кампуса"
  • "Рынок ивокруг "

Где, поскольку мы только хотим, чтобы он отображал текст для окончательного оператора if, а не все кодированные комбинации в этой серии выбора флажка.

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Вы можете легко настроить все свои потенциальные комбинации в Словаре (Of CheckBox (), String), это также поможет управлять ими, поскольку похоже, что у вас есть дубликат (CheckBox 1, 6 и 7). Ключ будет представлять все элементы управления флажка, которые необходимо будет проверить, и значением будет ваше сообщение.

Затем в событии нажатия кнопки вы получите каждый элемент в Словаре, где все флажкиэлементы управления в ключе проверены. Затем вы упорядочите коллекцию по длине ключа и получите первое сообщение:

Private ReadOnly combinations As Dictionary(Of CheckBox(), String) = New Dictionary(Of CheckBox(), String)() From {
    { {CheckBox1, CheckBox6}, "On Campus Student Center" },
    { {CheckBox1, CheckBox7}, "On Campus Market Place" },
    { {CheckBox1, CheckBox8}, "Around Campus " },
    { {CheckBox2, CheckBox3, CheckBox9}, "2 Mile Restaurant" },
    { {CheckBox2, CheckBox3, CheckBox10}, "2 Mile FF" },
    { {CheckBox2, CheckBox4, CheckBox9}, "3 Mile Restaurant" },
    { {CheckBox2, CheckBox4, CheckBox10}, "3 Mile FF" },
    { {CheckBox2, CheckBox5, CheckBox9}, "4 Mile Restaurant" },
    { {CheckBox2, CheckBox5, CheckBox10}, "4 Mile FF" },
    { {CheckBox1, CheckBox6, CheckBox7}, "All On Campus " },
    { {CheckBox1, CheckBox6, CheckBox7}, "Student Center and Marketplace " },
    { {CheckBox1, CheckBox6, CheckBox8}, "Student Center and Around Campus" },
    { {CheckBox1, CheckBox8, CheckBox7}, "Marketplace and Around" }
}

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    Dim matchedCombinations = combinations.Where(Function(kvp) kvp.Key.All(Function(cb) cb.Checked))

    If (matchedCombinations.Any()) Then
        Dim bestMatch = matchedCombinations.OrderByDescending(Function(kvp) kvp.Key.Length).First()

        MessageBox.Show(bestMatch.Value, "Valid Combination", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Else
        MessageBox.Show("None of the checked CheckBoxes matched a specified combination", "Invalid Combo", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If
End Sub
1 голос
/ 25 октября 2019

Если вы не хотите использовать LINQ, как и другой ответ, вот более упрощенный ответ. С точки зрения производительности, они в основном равны, так как вы на самом деле не просматриваете много объектов. Это в основном вопрос предпочтений.

HTML

<div>

            <input type="checkbox" id="CheckBox1" runat="server" />
            <input type="checkbox" id="CheckBox2" runat="server" />
            <input type="checkbox" id="CheckBox3" runat="server" />
            <input type="checkbox" id="CheckBox4" runat="server" />
            <input type="checkbox" id="CheckBox5" runat="server" />
            <input type="checkbox" id="CheckBox6" runat="server" />
            <input type="checkbox" id="CheckBox7" runat="server" />
            <input type="checkbox" id="CheckBox8" runat="server" />

            <asp:Button ID="Button1" runat="server" Text="Process" />

        </div>

Code-Behind

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

        If CheckBox1.Checked Then

            If CheckBox6.Checked Then
                MessageBox.Show("On Campus Student Center")

            ElseIf CheckBox7.Checked Then
                MessageBox.Show("On Campus Marketplace")

            End If

        ElseIf CheckBox2.Checked Then

            If CheckBox6.Checked Then
                ' message
            ElseIf CheckBox7.Checked Then
                ' message
            End If

        End If

    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...