PDA

Просмотр полной версии : Не могу разобраться с компонентом ComboBox


джонатан
27.05.2008, 07:18
Здравствуйте! Одна надежда на Вас осталась! Целую ночь брожу по гуглу и никак ничего немогу найти. :wacko:
Поставил значит я компонент ComboBox, дал ему имя "combo_pogoda" открыл закладку "parameters" начал думать...:umnik2: Вобщем ввел в Value 10 пунктов. В итоге получилось следующее:

data: []
editable: false
lables: [Страна1, Страна2, Страна3, Страна4, Страна5, Страна6, Страна7, Страна8, Страна9, Страна10]
rowCount: 10 (Сразу флеш поставил сам 5 почемуто, я поменял на 10)

А что дальше? Как мне написать, чтобы если юзер выбрал к примеру "Страну1", что-бы сразу произошло:
_root.countries.gotoAndStop(2);

Помогите пожалуйста мне глупому! А-то я уже прям незнаю что делать.

Заранее благодарю всех откликнувшихся.

alexcon314
27.05.2008, 09:15
Откройте обычный хэлп флэша и почитайте про обработчик события change компонента комбобокс.
F1->Component Language Reference->ComboBox component->ComboBox.change

джонатан
27.05.2008, 19:04
Хм... Почитал, но всеравно мало, что понял. Понял только следующее:

-Програмно добавляем пункты:

cbx.addItem({data:1, label:"страна1"});
cbx.addItem({data:2, label:"страна2"});
cbx.addItem({data:3, label:"страна3"});
Создаем переменную, которая будет создавать новый объект:
var cbListener:Object = new Object();

А вот тут уже говорим, что делать при выборе какого-либо пункта:

cbListener.change = function(event_obj:Object) {
trace("Value changed to: "+event_obj.target.selectedItem.label);
};


В данном случае флеш просто выводит надпись, тип "выбран пункт странаX". Я конечно могу написать вместо
trace("Value changed to: "+event_obj.target.selectedItem.label);
Чтонибудь вроде: _root.countries.gotoAndPlay(2)

Но ведь тогда будет переход на 2 фрейм клипа "countries" не зависимо от того какая страна выбрана!

Как мне написать для каждой строны, свой переход??Типа того:
Страна1 = gotoAndPlay(2);
Страна2 = gotoAndPlay(3);
Страна3 = gotoAndPlay(4);

Ну помогите мне уже глупому! Одна надежда на Вас...

Alex_beginner
27.05.2008, 19:20
Дак Вы товарищсч, че в label ту получаете сравнивайте с потребным (if ...label=="страна1" {переходим на соотвествующий кадр 1}, if ...label=="страна2" {переходим на соотвествующий кадр 2}, итд ) и усе будить ОК ОБИ. Лучше конструкцию switch-case использовать

джонатан
27.05.2008, 19:39
А где именно надо сравнивать?
В пределах этого кода?

cbListener.change = function(event_obj:Object) {
trace("Value changed to: "+event_obj.target.selectedItem.label);
};

Molecula
27.05.2008, 19:55
джонатан, всё верно.
event_obj.target.selectedItem.label
смотрим, что в лейблах...
event_obj.target.selectedItem.data
что в датах - делаем после этого какие-то манипуляции.
event_obj.target.value - то же что-то должно выдать.

джонатан
27.05.2008, 20:12
Так чтоли?


cbListener.change = function(event_obj:Object) {
if (event_obj.target.selectedItem.label == "страна1") {
_root.countries.gotoAndPlay(2);}
}

alexcon314
27.05.2008, 22:59
Дак Вы товарищсч, че в label ту получаете сравнивайте с потребным (if ...label=="страна1" {переходим на соотвествующий кадр 1}, if ...label=="страна2" {переходим на соотвествующий кадр 2}, итд ) и усе будить ОК ОБИ. Лучше конструкцию switch-case использовать

Alex_beginner, выражайтесь нормальным русским языком. Если хотите помочь - помогайте. Коверкание слов и выражений никого не украшает.

джонатан
27.05.2008, 23:49
УРААА! Я сделал это! Не без Вашей помощи конечно, уважаемые друзья! Спасибо всем кто помог!

И для тех у кого вдруг появится подобный вопрос (о установке и настройке компонента ComboBox), даю вот этот, код:

// Тут задаем пункты в комбобоксе.
cbx.addItem({data:1, label:"Выбирай:"});
cbx.addItem({data:2, label:"страна1"});
cbx.addItem({data:3, label:"страна2"});
cbx.addItem({data:4, label:"страна3"});
cbx.addItem({data:5, label:"страна4"});

// Создаем Listener Object.
var cbListener:Object = new Object();

// Прикрепляем функцию к Listener Object.
cbListener.change = function(event_obj:Object) {
if (event_obj.target.selectedItem.label == "страна1") {
_root.countries.gotoAndPlay(2);
} else if (event_obj.target.selectedItem.label == "страна2") {
_root.countries.gotoAndPlay(3);
} else if (event_obj.target.selectedItem.label == "страна3") {
_root.countries.gotoAndPlay(4);
} else if (event_obj.target.selectedItem.label == "страна4") {
_root.countries.gotoAndPlay(5);
}
};

// Add Listener.
cbx.addEventListener("change", cbListener);


"cbx" - имя ComboBox'a
"countries" - имя клипа который реагирует на выбраный пункт в ComboBox


Кроме этого прикрепляю и исходник :)

Еще раз спасибо всем, за помощь!

Alex_beginner
28.05.2008, 09:37
...else if...
Зачем так. Это не совсем красиво. Почему бы не использовать конструкцию switch-case. Код становиться при множественном выборе куда стройнее.

То, что касается каверканья слов - виноват, исправляюсь.

iNils
28.05.2008, 15:35
Да тут и case не нужен
var frame:Number = event_obj.target.selectedItem.data + 1;
if (frame > 2) {
_root.countries.gotoAndPlay (frame);
}

Alex_beginner
28.05.2008, 15:52
Можно и без case! Это только в том случае если между data и вызываемым кадром есть закономерность.