Как я могу обработать включение / отключение кнопок панели инструментов, когда состояние формы изменяется без использования оператора Select Case? - PullRequest
3 голосов
/ 28 декабря 2010

Мы все знаем, что можно обрабатывать включение / отключение кнопок ToolStrip при изменении состояния формы с помощью операторов Select Case (VB.NET) или switch оператора case в C #.

Но я помню, как мой учитель сказал, что «использование этих утверждений не является правильным способом, когда вы разрабатываете программное обеспечение с использованием ООП».

Private Sub SetToolStripButtons()
    Select Case formState
        Case FormStates.Normal
            btnSave.Enabled = False
            btnCancel.Enabled = False
            btnNew.Enabled = True
            btnEdit.Enabled = True
        Case FormStates.Edit
           btnSave.Enabled = True
            btnCancel.Enabled = True
            btnNew.Enabled = False
            btnEdit.Enabled = False
        '.....
        '.....
    End Select
End Sub 

РЕДАКТИРОВАТЬ: я поместил простой фрагмент кода выше

Так что бы вы порекомендовали вместо этого?

Ответы [ 4 ]

1 голос
/ 08 апреля 2012

Вы смотрели на государственный шаблон проектирования ?

У вас будет абстрактный класс для представления состояния FormState, в котором будет содержаться виртуальный SetToolStripButtons() метод:

Тогда каждая производная реализация этого класса отвечает за знание того, как установить видимость каждой кнопки (для данного состояния). Например, класс FormStateNormal переопределяет SetToolsStripButtons, чтобы содержать что-то вроде этого:

btnSave.Enabled = True
btnCancel.Enabled = True
btnNew.Enabled = False
btnEdit.Enabled = False    

Это нечто большее, чем просто это, но, надеюсь, это должно стать хорошей отправной точкой.

1 голос
/ 08 апреля 2012

Ну, код выглядит как действительный. Я не вижу проблем в использовании Select Case. Однако, если у вас есть только два состояния (Нормальное и Правка), вы можете улучшить свой код следующим образом:

btnSave.Enabled = (formState = FormStates.Edit)
btnCancel.Enabled = (formState = FormStates.Edit) 
btnNew.Enabled = (formState <> FormStates.Edit) 
btnEdit.Enabled = (formState <> FormStates.Edit) 
0 голосов
/ 07 декабря 2016

Ниже мое решение этого вопроса:

  1. Событие по нажатию на элемент в элементе управления полосой инструментов (кнопка «Полоса инструментов») 2. Случай выбора используется для идентификации кнопки, нажатой по ее тексту, а затем Строка кода блокировки передается методу lockToolStripItems ()
  2. lockToolStripItems ("код блокировки"), тогда метод позаботится о том, если путем интерпретации параметров, переданных путем преобразования его в массив char, тогда Поскольку цикл выполняется для блокировки или разблокировки элементов управления, обратите внимание, что 1 или 0 - это символы, которые я использовал 1 = Enabled = true, 0 = .Enable = false. если неизвестный символ, то он возвращает окно сообщения об ошибке. Обратите внимание, что переменная x в методе имеет 3 использования, A. счетчик в операторе for, индекс массива B.char, C. индекс элемента полосы инструментов

Так же легко, как в 3 шага, надеюсь, это поможет.

Private Sub ToolStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles mnuStripDeliveryNote.ItemClicked

            Select Case e.ClickedItem.ToString

                        Case "&New"

                            lockToolStripItems("10")

                        Case "&Edit"
                            lockToolStripItems("01")

                    End Select
                End Sub

    Private Sub lockToolStripItems(ByVal mylockCode As String)
                Dim myChar As Char
                For x = 0 To 1
                    myChar = mylockCode.Chars(x)
                    If myChar = "1" Then
                        mnuStripDeliveryNote.Items(x).Enabled = True
                    ElseIf myChar = "0" Then
                        mnuStripDeliveryNote.Items(x).Enabled = False
                    Else
                        MsgBox("Error on parameter" & myChar & "" & x)
                    End If
                Next
            End Sub
0 голосов
/ 28 мая 2015

вы можете сохранить режим редактирования в Boolean, затем установить enable = this Boolean Например: (установите режим редактирования как «True», иначе установите «False», затем вызовите функцию)

dim isEdit as Boolean

private sub SetToolStripButtons() 
   btnSave.Enabled = isEdit
   btnCancel.Enabled = isEdit
   btnNew.Enabled = Not isEdit
   btnEdit.Enabled = Not isEdit
End Sub 
...