Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Топ:
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
2021-05-27 | 28 |
5.00
из
|
Заказать работу |
|
|
Чтобы определить, какая строка выбрана в списке с возможностью выбора одной строки, проверяется свойство selection выбранной строки:
mySelection = myList.selection;
Чтобы уяснить, что делается в этом учебном скрипте, воспользуемся другим примером отклика на событие, он называется onChange, который отвечает на изменения в управлении окном. Добавим отклик в скрипт, проверяющий список:
var w = new Window ("dialog");
var myList = w.add ("listbox", undefined, ["один", "два", "три"]);
myList.onChange = function ()
{
$.writeln (myList.selection)
}
w.show ();
Запустим скрипт, выберем два, и программа выведет на экран слово два. Это выглядит как текст, но если проверить результат выбора таким образом:
if (myList.selection == "два")
то результат будет false. Причина в том, myList.selection возвращает не текст, а объект типа ListItem.
Изменим скрипт так:
var w = new Window ("dialog");
var myList = w.add ("listbox", undefined, ["one", "two", "three"]);
myList.onChange = function (){$.writeln (myList.selection.constructor.name)}
w.show ();
Теперь на экран будет выведено значение ListItem. Для получения содержимого этого объекта ListItem получите его свойство text:
if (myList.selection.text == "two")
Другое полезное свойство этого объекта — это index, который определяет положение строки в списке:
if (myList.selection.index == 2)
Замечание. Перед запуском стандартной процедуры обработки позиции списка всегда надо сперва убедиться, выбрано ли что-нибудь в этом списке:
myList.onChange = function ()
{
if (myList.selection!= null)
$.writeln (myList.selection.constructor.name);
}
Это касается и других вариантов списка — выпадающего и в виде дерева, они будут описаны далее. (Пример с использованием оператора onChange() не показателен, т.к. выбор выполняется явно при щелчке на строке списка, но бывают ситуации, когда при обращении к списку не предполагается, что в нем нужно что-то предварительно выбрать. Т.е. предполагается, что уже какая-то позиция в списке выбрана, но полезно иметь привычку всегда проверять, так ли это на самом деле.)
|
Определение, какие из элементов списка выбраны
Выбор нескольких объектов в списке отличается от предыдущего случая тем, что это массив объектов списка. Изменим предыдущий скрипт:
var w = new Window ("dialog");
var myList = w.add ("listbox", undefined, ["one", "two", "three"], {multiselect: true });
myList.onChange = function (){$.writeln (myList.selection.constructor.name)}
w.show ();
Запустим его, и на экран будет выведен массив. Массив элементов списка обрабатывается, как любой массив в JavaScript. Следующий скрипт напечатает содержимое выбранного списка:
var w = new Window ("dialog");
var myList = w.add ("listbox", undefined, ["one", "two", "three"], {multiselect: true });
var b = w.add ("button", undefined, "Print list");
b.onClick = function ()
{
for (var i = 0; i < myList.selection.length; i++)
$.writeln (myList.selection[i].text)
}
w.show ();
Обработка списков
Списки — это массивы объектов типа ListItem. Они обрабатываются несколько иначе, нежели обычные массивы. Следующий скрипт обрабатывает список просто печатью атрибута текста каждого элемента:
var w = new Window ("dialog");
var myList = w.add ("listbox", undefined, ["one", "two", "three"]);
var b = w.add ("button", undefined, "Print");
b.onClick = function ()
{
for (var i = 0; i < myList.items.length; i++)
$.writeln (myList.items[i].text);
}
w.show ();
Поиск объекта в списке
Для этого используется метод find:
var myItem = myList.find ("two");
Метод возвращает объект типа ListItem, если объект найден, и null, если объекта в списке нет.
Вставка объектов в список
Ранее мы видели, что объекты могут быть добавлены в существующий список методом.add (“list”). Это всегда добавляет объекты в конец списка. Для помещения объекта в определенное место, включите индекс назначения. Например, чтобы добавить объект в начало списка, воспользуйтесь такой строкой:
myList.add ("item", "zero", 0);
Чтобы избежать дублирования записей в массиве, можно использовать метод find, чтобы проверить, есть ли уже такой объект в массиве:
|
(myList.find (myNewItem)!= null)
myList.add ("item", myNewItem);
При добавлении объекта в массив окно обновляется автоматически, как показано ниже:
var w = new Window ("dialog");
var myList = w.add ("listbox", undefined, ["one", "two", "three"]);
var b = w.add ("button", undefined, "Add");
b.onClick = function () {myList.add ("item", "zero", 0)}
w.show ();
Упорядочение списков
Вот пример обработки списка — вставка объекта в список и сортировка обновленного списка по алфавиту. Программа активирует приглашение программы, поэтому можно ввести букву незамедлительно. Заметьте, что функция управления окном необязательно должна быть определена в том блоке, что определяет окно (т.е. между операторами new Window и w.show()).
var w = new Window ("dialog");
var myList = w.add ("listbox", [0, 0, 50, 150], ["A", "K", "X"]);
var input = w.add ("edittext");
input.active = true;
var b = w.add ("button", undefined, "Insert", {name: "ok"});
b.onClick = function () {insert_item (myList, input.text); input.text = ""}
w.show ();
function insert_item (list_obj, new_item)
{
if (list_obj.find (new_item) == null)
{
var stop = list_obj.items.length;
var i = 0;
while (i < stop && new_item > list_obj.items[i].text) i++;
list_obj.add ("item", new_item, i);
}
}
Интерфейс скрипта несколько неуклюжий, и кнопка ОК названа Insert — нажатие на клавишу Enter запускает функцию отклика на событие onClick. Далее мы покажем, как обрабатывать такие ситуации более элегантно, определив обработчик событий (event handler), а не использовать кнопку для этой цели.
Перемещение объектов списка
Для перемещения объектов в пространстве списка нужно иметь две кнопки: одна для перемещения выбранного объекта вверх, и другая — для перемещения вниз. Также нужна функция перестановки рядом стоящих объектов:
var w = new Window ("dialog", "Rearrange");
var list = w.add ("listbox", undefined, ["one", "two", "three", "four", "five"]);
list.selection = 1;
var up = w.add ("button", undefined, "Up");
var down = w.add ("button", undefined, "Down");
up.onClick = function ()
{
var n = list.selection.index;
if (n > 0)
{
swap (list.items [n-1], list.items [n]);
list.selection = n-1;
}
}
down.onClick = function ()
{
var n = list.selection.index;
if (n < list.items.length-1)
{
swap (list.items [n], list.items [n+1]);
list.selection = n+1;
}
}
function swap (x, y)
{
var temp = x.text;
x.text = y.text;
y.text = temp;
}
w.show ();
На самом деле объекты списка остаются на месте, меняются местами их свойства text, это делается функцией swap().
Удаление объектов из списка
|
Используйте метод.remove(), чтобы удалить объект из списка. Например, чтобы удалить третий объект из списка:
myList.remove (myList.items[2]);
Для удаления объекта, указав его имя, используйте этот метод так:
myList.remove (myList.find ("two"));
Варианты выбора строк в списке: с показом выбранных позиций или без него
Если перечень больше, чем бокс, то если в нем ничего не выбрано, список отображается с первой позиции; для выбора не поместившихся в окне строк надо прокрутить список. Если надо в открывающемся окне со списком иметь одну из сток уже выбранной, то надо использовать команду revealItem(), как показано в следующем скрипте:
var w = new Window ("dialog");
var list = w.add ("listbox");
for (var i = 0; i < 100; i++)
list.add ("item", "Строка_" + String (i))
list.preferredSize = [100,200];
//~ list.selection = 50; // screenshot (b)
//~ list.revealItem ("Строка_77"); // screenshot (c)
w.show ();
Когда две строки закомментированы, то результат работы скрипта показан на рис. а (в окне ничего не выбрано, список отображается с его первой позиции), раскомментировав первую строку — это рис. b, будет выбрана строка, являющаяся параметром команды list.selection. В большинстве случаев эта строка отображается как последняя строка окна. Но если пользователь хочет, чтобы в окне отображались другие строки, независимо от того, сделан в списке выбор или нет, то для решения этой задачи есть инструкция revealItem(). Раскомментируйте последнюю строку, и получите картинку c. Строка, что была параметром revealItem(), отображается как последняя строка окна Прокрутите список вверх, чтобы убедиться, что строка 50 была выбрана.
a | b | c | d |
Трудно придумать, где это может быть полезным, но если в скрипте определить, что выбранная строка стоит после той, что указана в инструкции revealItem(),
list.selection = 90;
list.revealItem ("Строка_77");
то указанная в этой инструкции строка будет первой в окне (окно d)
|
|
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!