|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBS/WSH/JS - Обращение к i-му чекбоксу на форме HTA в VBScript |
|
VBS/WSH/JS - Обращение к i-му чекбоксу на форме HTA в VBScript
|
![]() Старожил Сообщения: 206 |
Есть 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-му чекбоксу? Заранее всем благодарен! |
|
Отправлено: 23:42, 09-02-2011 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Попробовать получить список объектов формы и работать с ним?
Это так, мысль вслух. Как это сделать я пока не знаю. |
------- Отправлено: 23:50, 09-02-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Есть еще варианты, неужели нет возможностьи написать как-то If Checkbox[i].Checked Then ***??
Если есть возможность поподробнее про обращение ко всем объектам формы? |
Отправлено: 10:11, 10-02-2011 | #3 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать xor++, понимаешь, CheckBox1 - это имя, оно может быть любым. CheckBox[i] - обращение к элементу множества (массива). Т.е. нужна некоторая структура, объединяющая CheckBox'ы . Либо это будет CheckBoxGroup, либо некий собственный список.
Исходя из того, что форма уже является контейнером объектов, то я предложил попробовать работать с ней. Для наглядности можно привести пример с учениками в классе. Необходим механизм переводящий Ученик[i] в Петю например. Обращение к форме, в данном случае, приравнивается к обращению к классному журналу. |
------- Отправлено: 10:41, 10-02-2011 | #4 |
![]() Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать Понял. Попробую реализовать доступ к форме.
|
|
Отправлено: 13:01, 10-02-2011 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - VBscript | Klinifin | Программирование и базы данных | 3 | 16-10-2013 13:26 | |
VBS/WSH/JS - HTA приложение в терминале (RemoteApp) | salikoff | Скриптовые языки администрирования Windows | 0 | 18-10-2010 09:24 | |
VBS/WSH/JS - Удаленный запуск HTA-приложения от имени текущего пользователя | x wanderer | Скриптовые языки администрирования Windows | 1 | 15-04-2010 10:39 | |
VBS/WSH/JS - виснет hta в назначенных заданиях | pva | Программирование и базы данных | 4 | 07-04-2009 12:15 | |
Установка Линукс (Red Hta 7.3) | Cobalt | Общий по Linux | 6 | 13-09-2002 20:54 |
|