Существует ли более простой / более эффективный способ сделать Visible = False для нескольких кнопок в VB.NET? - PullRequest
0 голосов
/ 02 июля 2018

не уверен, есть ли более простой способ сделать это, но у меня есть МНОГО кнопок на форме. Разные видны для разных функций.

Есть ли способ, чтобы что-то подобное имело более простой способ изменить их видимость без кодирования каждой кнопки, чтобы перейти в False / True?

Для простоты я создал быстрое приложение для обработки видимости, но я хочу скрыть остальные, когда виден один набор кнопок. Поэтому, если я выберу 1-ю строку, Visibility FALSE будет равен 2-й и 3-й строке.

Я застрял с этим или есть более простой / более эффективный способ? СПАСИБО В НАПРАВЛЕНИИ!

Public Class Form1
    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        If ComboBox1.SelectedItem.ToString = "Button Row 1" Then
            Button1.Visible = True
            Button2.Visible = True
            Button3.Visible = True
            Button4.Visible = True
            Button5.Visible = True
            Button6.Visible = True
            Button7.Visible = True
            Button8.Visible = True
            Button9.Visible = True
            Button10.Visible = True
            Button11.Visible = False
            Button12.Visible = False
            Button13.Visible = False
            Button14.Visible = False
            Button15.Visible = False
            Button16.Visible = False
            Button17.Visible = False
            Button18.Visible = False
            Button19.Visible = False
            Button20.Visible = False
            Button21.Visible = False
            Button22.Visible = False
            Button23.Visible = False
            Button24.Visible = False
            Button25.Visible = False
            Button26.Visible = False
            Button27.Visible = False
            Button28.Visible = False
            Button29.Visible = False
            Button30.Visible = False
        ElseIf ComboBox1.SelectedItem.ToString = "Button Row 2" Then
            Button1.Visible = False
            Button2.Visible = False
            Button3.Visible = False
            Button4.Visible = False
            Button5.Visible = False
            Button6.Visible = False
            Button7.Visible = False
            Button8.Visible = False
            Button9.Visible = False
            Button10.Visible = False
            Button11.Visible = True
            Button12.Visible = True
            Button13.Visible = True
            Button14.Visible = True
            Button15.Visible = True
            Button16.Visible = True
            Button17.Visible = True
            Button18.Visible = True
            Button19.Visible = True
            Button20.Visible = True
            Button21.Visible = False
            Button22.Visible = False
            Button23.Visible = False
            Button24.Visible = False
            Button25.Visible = False
            Button26.Visible = False
            Button27.Visible = False
            Button28.Visible = False
            Button29.Visible = False
            Button30.Visible = False
        ElseIf ComboBox1.SelectedItem.ToString = "Button Row 3" Then
            Button1.Visible = False
            Button2.Visible = False
            Button3.Visible = False
            Button4.Visible = False
            Button5.Visible = False
            Button6.Visible = False
            Button7.Visible = False
            Button8.Visible = False
            Button9.Visible = False
            Button10.Visible = False
            Button11.Visible = False
            Button12.Visible = False
            Button13.Visible = False
            Button14.Visible = False
            Button15.Visible = False
            Button16.Visible = False
            Button17.Visible = False
            Button18.Visible = False
            Button19.Visible = False
            Button20.Visible = False
            Button21.Visible = True
            Button22.Visible = True
            Button23.Visible = True
            Button24.Visible = True
            Button25.Visible = True
            Button26.Visible = True
            Button27.Visible = True
            Button28.Visible = True
            Button29.Visible = True
            Button30.Visible = True
        End If
    End Sub
End Class

Ответы [ 3 ]

0 голосов
/ 02 июля 2018
  1. Вы можете использовать цикл for и отслеживать, какое текстовое поле находится в какой строке, можно поместить строку в имя, тег, использовать пользовательское свойство и т. Д.
  2. Вы можете поместить каждую строку в групповое поле и просто изменить видимость группы.
  3. Вы можете составить список кнопок для каждой строки, добавить кнопки и прокрутить эти списки.
0 голосов
/ 02 июля 2018

Winforms поддерживают привязку данных.

' In form constructor
public Sub New()
    InitializeComponent() 

    cmbEnableButtons.DataSource = New List(Of string) From 
    { 
        "Nothing", 
        "Button Row 1", 
        "Button row 2" 
    }
    button1.Tag = "Button Row 1"
    button2.Tag = "Button Row 1"
    button3.Tag = "Button Row 2"
    button4.Tag = "Button Row 2"

    button1.DataBindings.Add(CreateBindingForVisible())
    button2.DataBindings.Add(CreateBindingForVisible())
    button3.DataBindings.Add(CreateBindingForVisible())
    button4.DataBindings.Add(CreateBindingForVisible())
}

Private Function CreateBindingForVisible() As Binding
    Dim buttonBinding = 
        New Binding("Visible", 
                     cmbEnableButtons, 
                     "SelectedValue", 
                     true, 
                     DataSourceUpdateMode.OnPropertyChanged)

    ' Every time selected value of combobox changed
    ' this event handler convert string to "visible" boolean
    AddHandler buttonBinding.Format, AddressOf ButtonBinding_Format

    return buttonBinding;
End Sub

Private Sub ButtonBinding_Format(object sender, ConvertEventArgs e)
    Dim binding = DirectCast(sender, Binding)
    Dim button = DirectCast(binding.Control, Button)

    e.Value = Equals(button.Tag, e.Value)
End Sub

С привязкой данных вы можете настроить каждую кнопку отдельно друг от друга, имея общую логику в одном месте.

0 голосов
/ 02 июля 2018

Установить свойство тега кнопок. Вы можете сделать это в окне свойств. Я просто показываю это в коде, чтобы проиллюстрировать точку

Button1.Tag = "Button Row 1"

Тогда вы можете сделать

Dim selectedRow = ComboBox1.SelectedItem.ToString()
For Each c As Control In Controls
    If (TypeOf c Is Button) Then
        c.Visible = selectedRow.Equals(c.Tag)
    End If
Next 

Обратите внимание, что при этом автоматически отображаются кнопки выбранной строки и скрываются остальные.

Если это влияет на слишком много кнопок, вы также можете проверить, является ли Tag не Nothing, вместо проверки, является ли это кнопка.

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