-2

目前我在每个 Case 语句中都有相同的代码,有时我必须重复 50 次,有没有办法简化这一点:对于每个我必须创建 40 个帧,每个帧都命名为 VarFrame1...VarFrame40 我也是在 Excel 中的 Visual Basic 6.5 中创建此代码

For iVar = 1 To nrVars
    Select Case iVar
    Case 1
        VarFrame1.Caption = varInfo(iVar).varName
        VarFrame1.Top = lastRow
        VarFrame1.Left = leftMargin
        VarFrame1.Height = 12
        VarFrame1.Visible = True
    Case 2
        VarFrame2.Caption = varInfo(iVar).varName
        VarFrame2.Top = lastRow
        VarFrame2.Left = leftMargin
        VarFrame2.Height = 12
        VarFrame2.Visible = True

.... to Case 50

End Select

 lastRow = lastRow + 15

    Dim res As Boolean
Select Case varInfo(iVar).varType
    Case "RadioButton"
        nrOptionButtonVals = nrOptionButtonVals + 1
        res = SetUpOptionButtons(lastRow, iVar, nrOptionButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, False)
    Case "RadioButtonOther"
        nrOptionButtonVals = nrOptionButtonVals + 1
        res = SetUpOptionButtons(lastRow, iVar, nrOptionButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, True)
    Case "DropDown"
        res = SetUpDropDown(lastRow, iVar, varInfo(iVar).varOptions, varInfo(iVar).varOptionText)
    Case "CheckBox"
        nrCBButtonVals = nrCBButtonVals + 1
        res = SetUpCBButtons(lastRow, iVar, nrCBButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, False)
    Case "CheckBoxOther"
        nrCBButtonVals = nrCBButtonVals + 1
        res = SetUpCBButtons(lastRow, iVar, nrCBButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, True)
    Case "TextEntry"
        res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText)
    Case "DateEntry"
        res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText)
    Case "NumberEntry"
        res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText)
    End Select
    lastRow = lastRow + 10
Next iVar
QuitButton.Top = lastRow
lastRow = lastRow + 30
PhraseDisplay.Height = lastRow + 50

DisplayCorrectedPhrase
SetUpForm = True
End Sub

更新了蒂姆·威廉姆斯评论:

Public Function SetUpForm(ByRef thePhrase As String) As Boolean
    Dim nrVars, iVar, lastRow As Integer

    nrVars = Utilities.getNrPhraseVariables(thePhrase)
    ReDim varInfo(0 To nrVars)
    PhraseBoxOriginal.Text = thePhrase

    For iVar = 1 To nrVars
    varInfo(iVar).varName = Utilities.getPhraseVariable(thePhrase, iVar)
    varInfo(iVar).varIndex = PhraseVars.getPhraseVarIndex(varInfo(iVar).varName)
    varInfo(iVar).varType = PhraseVars.getTypeFromIndex(varInfo(iVar).varIndex)
    varInfo(iVar).varOptions = PhraseVars.getOptionsFromIndex(varInfo(iVar).varIndex)
    varInfo(iVar).varOptionText = PhraseVars.getOptionTextFromIndex(varInfo(iVar).varIndex)
    varInfo(iVar).varValue = Utilities.getVarOption("", 0) ' Get the default option string
    Next iVar

    nrOptionButtonVals = 0
    lastRow = 115
    For iVar = 1 To nrVars

      With Me.Controls("VarFrame" & iVar)
        .Caption = varInfo(iVar).varName
        .Top = lastRow
        .Left = leftMargin
        .Height = 12
        .Visible = True
      End With

    Next iVar
        lastRow = lastRow + 15

        Dim res As Boolean
    Select Case varInfo(iVar).varType
        Case "RadioButton"
            nrOptionButtonVals = nrOptionButtonVals + 1
            res = SetUpOptionButtons(lastRow, iVar, nrOptionButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, False)
        Case "RadioButtonOther"
            nrOptionButtonVals = nrOptionButtonVals + 1
            res = SetUpOptionButtons(lastRow, iVar, nrOptionButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, True)
        Case "DropDown"
            res = SetUpDropDown(lastRow, iVar, varInfo(iVar).varOptions, varInfo(iVar).varOptionText)
        Case "CheckBox"
            nrCBButtonVals = nrCBButtonVals + 1
            res = SetUpCBButtons(lastRow, iVar, nrCBButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, False)
        Case "CheckBoxOther"
            nrCBButtonVals = nrCBButtonVals + 1
            res = SetUpCBButtons(lastRow, iVar, nrCBButtonVals, varInfo(iVar).varOptions, varInfo(iVar).varOptionText, True)
        Case "TextEntry"
            res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText)
        Case "DateEntry"
            res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText)
        Case "NumberEntry"
            res = SetUpTextEntry(lastRow, iVar, varInfo(iVar).varType, varInfo(iVar).varOptions, varInfo(iVar).varOptionText)
        End Select
        lastRow = lastRow + 10
    Next iVar
    QuitButton.Top = lastRow
    lastRow = lastRow + 30
    PhraseDisplay.Height = lastRow + 50

    DisplayCorrectedPhrase
    SetUpForm = True
    End Sub
4

3 回答 3

4
For iVar = 1 To nrVars     

  With Me.Controls("VarFrame" & iVar)        
    .Caption = varInfo(iVar).varName         
    .Top = lastRow         
    .Left = leftMargin         
    .Height = 12         
    .Visible = True 
  End With

Next iVar
于 2012-09-10T16:34:25.497 回答
1

几个选项: 1. 使用在运行时添加的一组控件。2. 在启动时将这些控件中的每一个添加到列表中,然后您只需遍历列表。

于 2012-09-10T16:23:08.230 回答
0

您希望将所有帧都放在一个集合中,以便可以迭代它们并使用以下内容初始化它们:

Sub initFrame(ByRef frame as VarFrame)
    frame.Caption = varInfo(iVar).varName
    frame.Top = lastRow
    frame.Left = leftMargin
    frame.Height = 12
    frame.Visible = True
End Sub

For Each element As VarFrame In frames
    initFrame(element)
Next

这样,如果您以相同的方式初始化许多帧,则不必复制代码。

于 2012-09-10T16:29:24.213 回答