Vb.net - Сокращение оператора if на основе флажка / переключателя - PullRequest
0 голосов
/ 11 января 2012

Итак, в настоящее время я изучаю VB, и у меня есть проект, в котором я должен отобразить графическое окно на основе:

Какой флажок установлен

и

если установлен флажок, чтобы сделать изображение видимым.Как кто-то, кто ценит чистый, хороший код, это мой код, и он ужасает меня.Мой вопрос, есть ли способ сжать следующие случаи использования или какую-то другую конструкцию, которую я не знаю в VB.net?

    If CheckBox1.Checked = False Then
        BooksPictureBox.Visible = False
        MusicPictureBox.Visible = False
        PeriodicalsPictureBox.Visible = False
        CoffeeBarPictureBox.Visible = False
    End If
    If RadioButton1.Checked And CheckBox1.Checked = True Then
        BooksPictureBox.Visible = True
        MusicPictureBox.Visible = False
        PeriodicalsPictureBox.Visible = False
        CoffeeBarPictureBox.Visible = False
    End If
    If RadioButton2.Checked And CheckBox1.Checked = True Then
        BooksPictureBox.Visible = False
        MusicPictureBox.Visible = True
        PeriodicalsPictureBox.Visible = False
        CoffeeBarPictureBox.Visible = False
    End If
    If RadioButton3.Checked And CheckBox1.Checked = True Then
        BooksPictureBox.Visible = False
        MusicPictureBox.Visible = False
        PeriodicalsPictureBox.Visible = True
        CoffeeBarPictureBox.Visible = False
    End If
    If RadioButton4.Checked And CheckBox1.Checked = True Then
        BooksPictureBox.Visible = False
        MusicPictureBox.Visible = False
        PeriodicalsPictureBox.Visible = False
        CoffeeBarPictureBox.Visible = True
    End If

Примечание - все изображения складываются друг на друга, и все ониначать, не будучи видимым.

Ответы [ 3 ]

1 голос
/ 11 января 2012

Может быть, это?

' Set first condition, the check box must be checked
BooksPictureBox.Visible = CheckBox1.Checked
MusicPictureBox.Visible = CheckBox1.Checked
PeriodicalsPictureBox.Visible = CheckBox1.Checked
CoffeeBarPictureBox.Visible = CheckBox1.Checked

' Set individual conditions, the radio button must be checked
BooksPictureBox.Visible = RadioButton1.Checked
MusicPictureBox.Visible = RadioButton2.Checked
PeriodicalsPictureBox.Visible = RadioButton3.Checked
CoffeeBarPictureBox.Visible = RadioButton4.Checked

Редактировать : Или вы можете выбрать другой Чистый код подход:)

ShowOrHidePictureBoxes()

...

Private Sub ShowOrHidePictureBoxes
  ShowOrHideBooks()
  ShowOrHideMusic()
  ShowOrHidePeriodicals()
  ShowOrHideCoffeeBar()
End Sub

Private Sub ShowOrHideBooks
  BooksPictureBox.Visible = RadioButton1.Checked And CheckBox1.Checked
End Sub

Private Sub ShowOrHideMusic
  BooksPictureBox.Visible = RadioButton2.Checked And CheckBox1.Checked
End Sub

Private Sub ShowOrHidePeriodicals
  BooksPictureBox.Visible = RadioButton3.Checked And CheckBox1.Checked
End Sub

Private Sub ShowOrHideCoffeeBar
  BooksPictureBox.Visible = RadioButton4.Checked And CheckBox1.Checked
End Sub

Вы можете сделать это еще двумя способами:

  1. Извлечение логики в общий вспомогательный класс для повторного использования в приложении или даже в реальных моделях, которые представляют бизнес-концепции в приложении. Это будет сильно зависеть от того, как будет разрабатываться остальная часть приложения, каковы потребности бизнеса и т. Д. В контексте этого вопроса это скорее упражнение для размышления, чем реальный ответ.
  2. Назовите ваши элементы управления лучше, чтобы код выглядел более выразительно. Такие вещи, как CheckBox1 и RadioButton1 загрязняют код больше, чем операторы If:)
1 голос
/ 11 января 2012

Я бы создал SUb, который устанавливает все picBoxes невидимыми

Private Sub setInvisible
   BooksPictureBox.Visible = False
   MusicPictureBox.Visible = False
   PeriodicalsPictureBox.Visible = False
   CoffeeBarPictureBox.Visible = False
End sub

Затем еще одна процедура

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    setInvisible
    if checkbox1.checked = false then exit sub
    if radiobutton1.checked = true then bookspicturebox.visible = true
    if radiobutton2.checked = true then musicpicturebox.visible = true
etc...

End Sub

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

0 голосов
/ 11 января 2012

Вы можете получить что-то вроде:

    Dim fBooksVisible As Boolean
    Dim fMusicVisible As Boolean
    Dim fPeriodicalsVisible As Boolean
    Dim fCoffeeBarVisible As Boolean

    If CheckBox1.Checked Then
        fBooksVisible = RadioButton1.Checked
        fMusicVisible = RadioButton2.Checked
        fPeriodicalsVisible = RadioButton3.Checked
        fCoffeeBarVisible = RadioButton4.Checked
    End If

    BooksPictureBox.Visible = fBooksVisible
    MusicPictureBox.Visible = fMusicVisible
    PeriodicalsPictureBox.Visible = fPeriodicalsVisible
    CoffeeBarPictureBox.Visible = fCoffeeBarVisible

или даже:

    BooksPictureBox.Visible = RadioButton1.Checked AndAlso CheckBox1.Checked
    MusicPictureBox.Visible = RadioButton2.Checked AndAlso CheckBox1.Checked
    PeriodicalsPictureBox.Visible = RadioButton3.Checked AndAlso CheckBox1.Checked
    CoffeeBarPictureBox.Visible = RadioButton4.Checked AndAlso CheckBox1.Checked
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...