2014-12-26 3 views
1

У меня есть довольно большой оператор If.Упростить заявление «If»

If Node1.IsSelected Then 
    CrumbBar1.SelectedItem = HomeNode 
    ' Main week views 
ElseIf Node2.IsSelected Then 
    CrumbBar1.SelectedItem = wk1 
ElseIf Node3.IsSelected Then 
    CrumbBar1.SelectedItem = wk2 
ElseIf Node4.IsSelected Then 
    CrumbBar1.SelectedItem = wk3 
ElseIf Node5.IsSelected Then 
    CrumbBar1.SelectedItem = wk4 
    ' Week 1 
ElseIf Node6.IsSelected Then 
    CrumbBar1.SelectedItem = mon1 
ElseIf Node7.IsSelected Then 
    CrumbBar1.SelectedItem = tue1 
ElseIf Node8.IsSelected Then 
    CrumbBar1.SelectedItem = wed1 
ElseIf Node9.IsSelected Then 
    CrumbBar1.SelectedItem = thu1 
ElseIf Node10.IsSelected Then 
    CrumbBar1.SelectedItem = fri1 
    ' Week 2 
ElseIf Node11.IsSelected Then 
    CrumbBar1.SelectedItem = mon2 
ElseIf Node12.IsSelected Then 
    CrumbBar1.SelectedItem = tue2 
ElseIf Node13.IsSelected Then 
    CrumbBar1.SelectedItem = wed2 
ElseIf Node14.IsSelected Then 
    CrumbBar1.SelectedItem = thu2 
ElseIf Node15.IsSelected Then 
    CrumbBar1.SelectedItem = fri2 
    ' Week 3 
ElseIf Node16.IsSelected Then 
    CrumbBar1.SelectedItem = mon3 
ElseIf Node17.IsSelected Then 
    CrumbBar1.SelectedItem = tue3 
ElseIf Node18.IsSelected Then 
    CrumbBar1.SelectedItem = wed3 
ElseIf Node19.IsSelected Then 
    CrumbBar1.SelectedItem = thu3 
ElseIf Node20.IsSelected Then 
    CrumbBar1.SelectedItem = fri3 
    ' Week 4 
ElseIf Node21.IsSelected Then 
    CrumbBar1.SelectedItem = mon2 
ElseIf Node22.IsSelected Then 
    CrumbBar1.SelectedItem = tue2 
ElseIf Node23.IsSelected Then 
    CrumbBar1.SelectedItem = wed2 
ElseIf Node24.IsSelected Then 
    CrumbBar1.SelectedItem = thu2 
ElseIf Node25.IsSelected Then 
    CrumbBar1.SelectedItem = fri2 
Else 
    CrumbBar1.SelectedItem = HomeNode 
End If 

Я знаю о Select Case заявления, но это может If заявление упрощена с помощью одного?

Меня учили в колледже, используя Delphi, этот выбор случая работал только с одиночными символами и целыми числами. Является ли это одинаковым для всех/большинства языков?

Чтобы успокоить людей, я переименую все узлы и CrumbBar1 в нечто более значимое, это просто временные имена.

Узлы являются частью элемента управления TreeView, а CrumbBar является компонентом, подобным тому, который наблюдается в проводнике Windows в качестве адресной строки.

+3

VB.NET - это не Delphi, поэтому урок не применяется. Фактически, SELECT CASE довольно гибкий и мощный в VB. Что это за вещи? Если объекты с наименьшим именем «NodeXX» обладают свойством Tag, вы можете спрятать связанный с ним объект и установить для него SelectedItem. – Plutonix

+3

Оператор Case Case будет работать нормально, за исключением того, что он не делает код более красивым. Это вышло из рельсов, когда вы решили создать переменные 25 узлов. Почему вам нужно TreeView * и * CrumbBar трудно догадаться. –

+0

Другим вариантом будет «Словарь» для отображения узлов в крошки. – Plutonix

ответ

2

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

Есть много способов, которыми это может быть реорганизовано, и мне нужно будет увидеть больше исходного кода, чтобы действительно понять, что вы здесь делаете. (mon1, mon2 - объекты? Строки?)

Рассмотрите возможность хранения всех предметов, которые вы помещаете в Crumbar1.SelectedItem в массив. Затем вы можете сделать что-то вроде CrumbBar.SelectedItem = items[x], где x - это индекс выбранного элемента в TreeView. (Или сделайте все это в событии TreeView OnSelectedItem.)

Если вы разместили больше своего кода или более подробную информацию о проблеме, которую пытаетесь решить, я был бы рад обновить свой ответ более полным кода.

+0

Эти переменные являются членами элемента управления CrumbBar, аналогичным адресной строке в проводнике Windows. То, что эта система делает, - это изменение выбранного элемента крошки, основанного на том, какой узел (с той же иерархией элементов) в древовидной структуре. Mon1 и т. Д., Относятся к тому, в какой день недели, так что mon1 - неделя 1-го дня. Эта система представляет собой пятидневный, четырехнедельный календарь, древовидная и крошающая решетки используются для фильтрации календаря только на указанный день или неделю – Jamie

Смежные вопросы