2014-09-08 3 views
1

В настоящее время я пытаюсь изучить VB6 и наткнулся на эту проблему. Мне хотелось пройти цикл for и добавить число к управляющему имени.VB6, Добавление целого числа в управляющее имя в цикле for

Dim I As Integer 

For I = 1 To 5 
    S = CStr(I) 
    If TextS.Text = "" Then 
     LabelS.ForeColor = &HFF& 
    Else 
     LabelS.ForeColor = &H80000012 
    End If 
Next I 

Этот S должен быть добавлен к Text и Label поэтому цвет будет изменен без необходимости использовать 5 IfElse заявления

Я надеюсь, что вы можете помочь мне с этим.

ответ

3

Ваш комментарий ниже:

Что я имею в виду следующее: If Text1.text = "" Тогда мне нужен этот 1 быть заменен переменной I, так что цикл может быть зациклена через мои 5 текстовых и то же для моего Этикетки.

Вы не можете этого сделать (найдите переменную, используя выражение для создания своего имени) в VB6. (Edit:.. Хотя это утверждение верно, это не правда, что вы не можете посмотреть форму управления используя имя из выражения См «альтернативный» ниже)

Что вы можете сделать, это сделать массив ваших текстовых полей, а затем индексируйте в этот массив. Dev env даже поможет вам в этом: откройте свою форму в dev env и нажмите на первое текстовое поле. Измените его имя на имя, которое вы хотите, чтобы массив имел (возможно, TextBoxes). Затем щелкните следующее текстовое поле и измените его имя на одно и то же (TextBoxes). DEV окр спросит вас:

"You already have a control named 'TextBoxes'. do you want to create a control array?"

(Не спрашивайте меня, почему у меня есть виртуальная машина валяется с VB6 на нем ...)

Нажмите кнопку Да, а затем вы можете переименуйте другие текстовые поля TextBoxes, чтобы добавить их в массив. Затем сделайте то же самое для своих лейблов.

Тогда ваш код должен выглядеть следующим образом:

For I = TextBoxes.LBound To TextBoxes.UBound 
    If TextBoxes(I).Text = "" Then 
     Labels(I).ForeColor = &HFF& 
    Else 
     Labels(I).ForeColor = &H80000012 
    End If 
Next 

LBound самый низкий индекс массива элементов управления, UBound является самым высоким. (Вы не можете использовать стандартные LBound и Ubound, которые принимают массив как аргумент, потому что массивы управления не совсем нормальные массивы.) Обратите также внимание на то, что нет необходимости ставить I на строку Next, которая не была обязательной так как VB4 или VB5. Вы можете, хотя, если вам нравится быть явным.

Просто убедитесь, что у вас точно такое же число TextBoxes, что и Labels. Кроме того, вы можете создать пользовательский элемент управления, состоящий из метки и текстового поля, а затем иметь контрольный массив вашего пользовательского элемента управления.


Альтернатива:: Вы можете использовать Controls массив для поиска элемента управления, используя имя полученное из выражения, например:

For I = 1 To 5 
    If Me.Controls("Text" & I).Text = "" Then 
     Me.Controls("Label" & I).ForeColor = &HFF& 
    Else 
     Me.Controls("Label" & I).ForeColor = &H80000012 
    End If 
Next 

Это имеет преимущество отображения над к очень похожая конструкция в VB.Net, если вы в какой-то момент мигрируете.


Примечание стороны:

Я сейчас пытаюсь вам узнать VB6 ...

(Т.Л., д-р - я рекомендовал бы узнать что-то другое вместо VB6 устарел и dev env не поддерживается в течение многих лет.)

Среда разработки VB6 была прекращена и не поддерживается в течение многих лет (с 2008 года). Время выполнения все еще (я считаю) поддерживается из-за огромного количества приложений, которые его используют, хотя последний патч, кажется, from 2012. Но FWIW, вы получите лучшую отдачу от учебного времени, изучая VB.net или C# .Net (или любой из нескольких языков, отличных от Microsoft), а не VB6 ...

+1

Что я имею в виду: 'If Text1.text = "" Then' Мне нужно, чтобы этот 1 был заменен переменной I, поэтому цикл for может проходить через мои 5 текстовых полей и то же самое для моих ярлыков. Мне очень жаль, что я так не понял – user2479441

+0

@ user2479441: Ах! Теперь я понимаю. Я обновил ответ. –

+1

Спасибо, много! Это было именно то, что мне нужно. Извините снова за то, что вы так не поняли. С наилучшими пожеланиями, Тим Смитс – user2479441

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