PDA

Просмотр полной версии : Установка фокуса на клип, при щелчке мыши на нем


Alexmody
17.01.2012, 13:30
Не совсем пойму принцип установления фокуса на объект при щелчке мыши.
Например, если у объекта стоит tabEnadled = true, то с помощью клавиши Tab мы перемещаемся и меняем фокус объектов. Если же мы кликаем на клип, то фокус на него не смещается, а мне необходимо при клике, чтобы фокус был на клипе, без использования программного метода (visual.stage.focus). Как включить клип в список объектов, чтобы при щелчке на нем останавливался фокус?

silin
17.01.2012, 14:23
если установить объекту tabIndex ( при tabEnabled = true), то включается и установка фокуса по клику
по умолчанию (tabIndex=-1) фокус не перемещается
да, мутная какая-то логика

Добавлено через 8 минут
пардон, неправильно я нащелкал: tabIndex не при делах, при tabEnabled = true и так все работает

Добавлено через 23 минуты
упс, совсем непонятно все
такой вот пример: если не задавать явно tabEnabled, то он для спрайта false, при этом если задать tabIndex, то фокус начинает передаваться
а вот если явно задать tabEnabled, то уже никак :)
public class Main extends Sprite
{

public function Main():void
{
stage.scaleMode = StageScaleMode.NO_SCALE;
addEventListener(MouseEvent.CLICK, click);
for (var i:int = 0; i < 2; i++)
{
addChild(getObj());
}
}

private function click(e:MouseEvent):void
{
// tabEnabled=false, но фокус передается
trace("e : " + e.target.name + " tabEnabled: " + e.target.tabEnabled);
trace("stage.focus : " + (stage.focus ? stage.focus.name : "null"));

}
private var counter:int = 0;

private function getObj():Sprite
{
var obj:Sprite = new Sprite();
obj.x = 400 * Math.random();
obj.y = 400 * Math.random();
obj.graphics.beginFill(0);
obj.graphics.drawCircle(0, 0, 20);
// если явно выключить tabEnabled, то фокус не будет передаватьсяы
//obj.tabEnabled = false;
obj.tabIndex = 0;
obj.name = "s" + counter++;
return obj;
}
}