Определение, какой из элементов списка выбран — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Определение, какой из элементов списка выбран

2021-05-27 28
Определение, какой из элементов списка выбран 0.00 из 5.00 0 оценок
Заказать работу

Чтобы определить, какая строка выбрана в списке с возможностью выбора одной строки, проверяется свойство 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.045 с.