2014-02-27 50 views
0

这是一个来自Visual Basic程序的代码,我想知道是否有方法来简化它?有人可以帮我简化我的代码段吗?

它需要字符串的数量,并说,如果你等于这个数字,然后显示这封信和这封面。

有没有更简单的方法来做到这一点,所以我不必一遍又一遍地重复代码?

If UBound(Variables.Words) = "0" Then 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
    ElseIf UBound(Variables.Words) = "1" Then 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
    ElseIf UBound(Variables.Words) = "2" Then 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
    ElseIf UBound(Variables.Words) = "3" Then 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
    ElseIf UBound(Variables.Words) = "4" Then 
     Round1.Letter4.Show() 
     Round1.Cover4.Show() 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
    ElseIf UBound(Variables.Words) = "5" Then 
     Round1.Letter4.Show() 
     Round1.Cover4.Show() 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
     Round1.Letter9.Show() 
     Round1.Cover9.Show() 
    ElseIf UBound(Variables.Words) = "6" Then 
     Round1.Letter3.Show() 
     Round1.Cover3.Show() 
     Round1.Letter4.Show() 
     Round1.Cover4.Show() 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
     Round1.Letter9.Show() 
     Round1.Cover9.Show() 
    ElseIf UBound(Variables.Words) = "7" Then 
     Round1.Letter3.Show() 
     Round1.Cover3.Show() 
     Round1.Letter4.Show() 
     Round1.Cover4.Show() 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
     Round1.Letter9.Show() 
     Round1.Cover9.Show() 
     Round1.Letter10.Show() 
     Round1.Cover10.Show() 
    ElseIf UBound(Variables.Words) = "8" Then 
     Round1.Letter2.Show() 
     Round1.Cover2.Show() 
     Round1.Letter3.Show() 
     Round1.Cover3.Show() 
     Round1.Letter4.Show() 
     Round1.Cover4.Show() 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
     Round1.Letter9.Show() 
     Round1.Cover9.Show() 
     Round1.Letter10.Show() 
     Round1.Cover10.Show() 
    ElseIf UBound(Variables.Words) = "9" Then 
     Round1.Letter2.Show() 
     Round1.Cover2.Show() 
     Round1.Letter3.Show() 
     Round1.Cover3.Show() 
     Round1.Letter4.Show() 
     Round1.Cover4.Show() 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
     Round1.Letter9.Show() 
     Round1.Cover9.Show() 
     Round1.Letter10.Show() 
     Round1.Cover10.Show() 
     Round1.Letter11.Show() 
     Round1.Cover11.Show() 
    ElseIf UBound(Variables.Words) = "10" Then 
     Round1.Letter1.Show() 
     Round1.Cover1.Show() 
     Round1.Letter2.Show() 
     Round1.Cover2.Show() 
     Round1.Letter3.Show() 
     Round1.Cover3.Show() 
     Round1.Letter4.Show() 
     Round1.Cover4.Show() 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
     Round1.Letter9.Show() 
     Round1.Cover9.Show() 
     Round1.Letter10.Show() 
     Round1.Cover10.Show() 
     Round1.Letter11.Show() 
     Round1.Cover11.Show() 
    ElseIf UBound(Variables.Words) = "11" Then 
     Round1.Letter1.Show() 
     Round1.Cover1.Show() 
     Round1.Letter2.Show() 
     Round1.Cover2.Show() 
     Round1.Letter3.Show() 
     Round1.Cover3.Show() 
     Round1.Letter4.Show() 
     Round1.Cover4.Show() 
     Round1.Letter5.Show() 
     Round1.Cover5.Show() 
     Round1.Letter6.Show() 
     Round1.Cover6.Show() 
     Round1.Letter7.Show() 
     Round1.Cover7.Show() 
     Round1.Letter8.Show() 
     Round1.Cover8.Show() 
     Round1.Letter9.Show() 
     Round1.Cover9.Show() 
     Round1.Letter10.Show() 
     Round1.Cover10.Show() 
     Round1.Letter11.Show() 
     Round1.Cover11.Show() 
     Round1.Letter12.Show() 
     Round1.Cover12.Show() 
    End If 

任何帮助非常感谢!

谢谢,丹。

编辑** 我不是新的,但我只知道基本的功能。对不起很难,但你能告诉我完整的例子,我需要做什么。

再次感谢。

+0

可以简化它,它使用'开关... case',而不是'如果.... else' – Iqbal

+0

不,他不可阻挡。 @ Searle95:如果**> = **,则显示...这样,每个if-part中只有两个语句,而不是2,4,6,8 ... – deviantfan

+1

为什么他可以't @deviantfan?看它总是检查'='的代码如何设置范围比较'> ='?因为在代码中它开始从'0'到'11'进行检查并检查每个数字。你如何设置'> ='? – Iqbal

回答

0

稍微减少重复的另一个选择是将呼叫分组为功能,因为它好像是字母和封面总是一起显示。

Private Function ShowSection6() 
    Round1.Letter6.Show() 
    Round1.Cover6.Show() 
End Sub   

Private Function ShowSection7() 
    Round1.Letter7.Show() 
    Round1.Cover7.Show() 
End Sub   
'.... etc ... 

然后在SELECT语句由@Westie提到的,因为你每次只

Select Case UBound(Variables.Words) 
     Case 0 
      ShowSection6() 
     Case 1 
      ShowSection6() 
      ShowSection7() 
     Case 2 
     ... 
     Case Else 
     ... 
    End Select 
+0

谢谢布伦特,我没有想到这一点,这肯定会有帮助! – Searle95

1

你能重构字母和覆盖有一个单一的结果,使他们在一个阵列组事物或集合,然后假设它们总是连续的,写一个程序传递的开始和结束PARAMS沿着这些路线:

dim i as integer = Ubound(words) 
select case i 
case 0 
showlettersandcovers(6,6) 
case 1 
showlettersandcovers(6,7) 
. . . 
case 3 
showlettersandcovers(5,8) 
. . . 

(响应添加评论)

sub ShowLettersAndcovers(startnum as integer, endnum as integer) 
for i as integer = startnum to endnum 
    Round1.Letter(i).show 
    Round1.Cover(i).show 
next 

这是假设你能得到你的来信并涵盖到一个数组或类似的 - 不知道你的应用程序的细节,我不知道这是否是一个合理的假设与否。例如,您可能能够设置你的信像这样:

Dim letterarray as letter() with {new letter(paramsforletter0), new letter(paramsforletter1 . . . } 

或者你可以从数据库中加载它们,所以他们可能已经在这,你可以如上迭代的数据集。 。 。

+0

对不起,彼得,请你给我一个完整的例子吗? – Searle95

0

大厦彼得G公司的理念:

你能避免,你必须说出这么多的变量,所以特别能够通过如下所示的LoadItemLookup方法动态地创建他们能够控制他们的情况,但这样做的方法你做到了,你可以使用这样的查询:

' Lookup of Cover/Letter objects 
Private _ItemLookup as Dictionary(of Integer, YourObjectType) 
Private ReadOnly Property ItemLookup As Dictionary(of Integer, YourObjectType) 
    Get 
     If IsNothing(_itemLookup) Then 
      _ItemLookup = LoadItemLookup 
     End If 
     Return _ItemLookup 
    End Get 
End Property 

' Loads the lookup 
Private function LoadItemLookup as Dictionary(of Integer, YourObjectType) 
    dim newLookup As New Dictionary(of Integer, YourObjectType) 
    newLookup.Add(1, Round1.Letter1) 
newLookup.Add(2, Round1.Letter2) 
newLookup.Add(3, Round1.Letter3) 
    'etc 
    Return newLookup 
End Sub 


Private Sub YourExecutingSub 

    Select Case UBound(Variables.Words) 
     Case "0" 
      ShowItems(6, 6) 
     Case "1" 
      ShowItems(6, 7) 
     Case "2" 
      ShowItems(5, 7) 
     Case "3" 
      ShowItems(5, 8) 
     Case "4" 
      ShowItems(4, 8) 

    End Select 
End Sub 

' taken from peter g's answer 
Private Sub ShowItems(ByVal startNumber as Integer, byval EndNumber as Integer) 
    For i As Integer = StartNumber to EndNUmber 
     If ItemLookup.ContainsKey(i) Then 
      ItemLookup(i).Letter.Show 
      ItemLookup(i).Cover.Show 
     End If 
    Next 
End Sub 
相关问题