Обращение к i-му чекбоксу на форме HTA в VBScript
Есть HTA - приложение с VBS-скриптом.
Код:
<html>
<head>
<title>app</title>
<hta:application
id="889988"
ApplicationName = "GO!"
Border = "Thick"
Caption = "yes"
Scroll = "no"
SingleInstance = "yes"
WindowState = "normal"
Version = "1.1"
ShowInTaskBar = "Yes"
MaximizeButton = "No"
MinimizeButton = "No"
/>
</head>
<script language="VBScript">
Option Explicit
'======= глобальные переменные ====================================================================================
Dim chisloStrok 'тест: число строк в профиле
dim sheduleArray() ' Массив-Задание - глобальный массив, сформированный на основании анализа чекбоксов массив из строк профиля - который записывается в файл c:\currenttask
dim currenProfileFile ' выбранный файл профиля (строка)
'==================================================================================================================
sub main 'главный код программы начало работы программы
filligProfileList ' заполняем лист профилей
end Sub
sub filligProfileList 'Заполняет листбокс списком файлов-профилей в папке profiles
Dim fso, f, f1, fc, prFolder, objOption
prFolder = "profiles"
For Each objOption in listboxProfile.Options 'очистка листбокса
objOption.RemoveNode
Next
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(prFolder)
Set fc = f.Files
For Each f1 in fc
Set objOption = Document.createElement("OPTION")
objOption.Text = f1.name
objOption.Value = f1.name
listboxProfile.Add(objOption)
Next
end Sub
sub ActivateProfile 'добавляет чекбоксы на форму, строит скрипт-процедуру их инициации (ActSomeCB) и скрипт-процедуру редактирования Массива-Задания в соответсвтии с чекбоксами
dim ForReading, ProfileFile, objFSO, objFile, stroka, objOption, htmlstr, cnt, strSub, strSubEditSheduleArray, checkFlag
ForReading = 1
ProfileFile = "profiles\" & listboxProfile.value
strSub = strSub & "Sub ActSomeCB" & vbcrlf 'заголовок процедуры Инициализации Чекбоксов
strSubEditSheduleArray = strSubEditSheduleArray & "Sub EditSheduleArray" & vbcrlf 'заголовок процедуры Редактирования Массива-Задания
'Msgbox ProfileFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(ProfileFile, ForReading)
checkFlag=0 'флаг выбора чекбокса
cnt=0 'счетчик чекбоксов
CheckBoxArea.InnerHTML = "" 'поле для чекбоксов - пока не заполнено
Do Until objFile.AtEndOfStream 'для каждой строки файла профиля
stroka = objFile.ReadLine
'getTaskInf(stroka) 'получаем путь, имя и флаг задания и заряжаем чекбокс
'и делаем новый код чекбокса
htmlstr = "<input type=" & chr(34) & "checkbox" & chr(34) & "name=" & chr(34) & "CBox" & cnt & chr(34) & "value=" & chr(34) & "1" & chr(34) & ">" & getTaskName(stroka) 'зарядили именем
'и добавляем его на поле
CheckBoxArea.InnerHTML = CheckBoxArea.InnerHTML & vbcrlf & vbcrlf + htmlstr
'и если флаг равен 1, то в процедурку инициации добавляем еще одну строку
if getTaskFlag(stroka) = 1 then strSub = strSub & " CBox"&cnt&".Checked = true" & vbcrlf 'тело процедуры инициализации чекбоксов
' создаем массив равный файлу профиля, чтобы потом его изменить и создать из него файл-задания
redim preserve sheduleArray(cnt) 'увеличиваем массив в соответствии с новым числом строк
sheduleArray(cnt) = stroka 'и добавляем в него новую строку из профиля
strSubEditSheduleArray = strSubEditSheduleArray & " If CBox"&cnt&".Checked Then sheduleArray("&cnt&")=EditCurrentFlagTo1(sheduleArray("&cnt&"))" & VbCrLf
strSubEditSheduleArray = strSubEditSheduleArray & " If not CBox"&cnt&".Checked Then sheduleArray("&cnt&")=EditCurrentFlagTo0(sheduleArray("&cnt&"))" & VbCrLf
cnt = cnt + 1
Loop
objFile.Close
strSub = strSub & "End Sub" 'окончание процедуры инициализации чекбоксов
strSubEditSheduleArray = strSubEditSheduleArray & "End Sub" 'окончание процедуры Старта инсталляций
SelSomeCBScript.text = strSub 'строим процедуру инициализации чекбоксов
scrEditSheduleArray.text = strSubEditSheduleArray 'строим процедуру редактирования Массива-Задания
ActSomeCB 'вызываем построенную процедуру ActSomeCB в п построенном скрипе SelSomeCBScript
currenProfileFile = listboxProfile.value ' глобаная переменная currenProfileFile заполнятеся выбранным из списка профилем
ChisloStrok = cnt 'тест
' у CreateWorkFiles
End Sub
function EditCurrentFlagTo1(str)'ставит в строчке Массива-Задания флаг = 1
dim currentstring
currentstring = getTaskPath(str)&"="&getTaskName(str)&"="&"1"
EditCurrentFlagTo1 = currentstring
end Function
function EditCurrentFlagTo0(str)'ставит в строчке Массива-Задания флаг = 0
dim currentstring
currentstring = getTaskPath(str)&"="&getTaskName(str)&"="&"0"
EditCurrentFlagTo0 = currentstring
end Function
</script>
<SCRIPT Language="VBScript" id="SelSomeCBScript"> ' делает чекбокс выбранным если это указано в файле-профиля
</SCRIPT>
<SCRIPT Language="VBScript" id="scrEditSheduleArray"> 'Редактирует Массив-Задание в соответсвтии с текущими показателями чекбоксов
</SCRIPT>
<body onload="main">
<input id=runbutton class="button" type="button" value="Заполнить лист профилей" name="fill_profile_button" onClick="filligProfileList" Disabled=True>
<br>
<br>
<select size="6" name="listboxProfile" onChange="ActivateProfile">
</select>
<br>
<br>
<span id="CheckBoxArea"></span>
<br>
<br>
<input id="GoButton" type="button" value="Start" onclick="StartSub1" />
<br>
<br>
<input type="checkbox"name="BasicCheckbox"value="1" onclick = "onCBChange"> Option 1
<br>
<br>
</body>
</html>
В цикле строится процедура, которая на форму добавляет чекбоксы.
Все отлично. Чекбоксы строятся.
Вопрос: Как после обратиться к i-му чекбоксу на форме??
Иначе: Как обежать в цикле все чекбоксы и проверить выбрат i-й чекбокс или нет?
Конечно, можно написать
If Checkbox1.Checked Then ***
If Checkbox2.Checked Then ***
If Checkbox3.Checked Then ***
Как обратиться в цикле к I-му чекбоксу? Заранее всем благодарен!
|