Как создать пользовательский MouseEvent. НАЖАТЬ событие в AS3 (параметры передачи для функционирования)?

Это можно сделать без явного использования Timer. Вместо этого используйте асинхронный Task.Delay, который упростит код и облегчит понимание реальных / доменных намерений.

// Create extension method for better readability
public class ControlExtensions
{
    public static Task DisableForSeconds(int seconds)
    {
        control.Enabled = false;
        await Task.Delay(seconds * 1000);
        control.Enabled = true;
    }
}

private void checkBox1_CheckStateChanged(object sender, EventArgs e)
{
    var checkbox = (CheckBox)sender;
    if (checkbox.Checked)
    {
        checkbox.Text = "On";
        picturebox1.Show();
        pictureBox5.Hide();
    }
    else
    {
        checkbox.Text = "Off";
        checkbox.DisableForSeconds(15 * 60);
        pictureBox1.Hide();
        pictureBox5.Show();
    }
}
7
задан fromvega 8 January 2009 в 23:52
поделиться

3 ответа

Не зная больше о Вашем приложении, это больше кажется, что необходимо использовать цель, чтобы передать параметры или расширить MouseEvent. Первый больше соответствовал бы обычной практике, все же. Так, например, если Вы выставили целочисленную общественную собственность на своем объекте "клипа" (независимо от того, что это):

public class MyClip
{
   public var myPublicProperty:int;

   public function MyClip() { //... }
}

for (var i:int = 0; i < 10; i++)
{
   myClips[i].myPublicProperty = i;
   myClips[i].addEventListener(MouseEvent.CLICK, doSomething);
}

... и затем, в Вашем слушателе события, Вы могли получить то свойство с помощью или цели или currentTarget свойства события (вероятно, currentTarget в случае):

function doSomething(event:MouseEvent):void
{
   trace(event.currentTarget.myPublicProperty.toString());
}

Это должно сделать это!Удачи.

6
ответ дан 6 December 2019 в 09:23
поделиться

Действительно необходимо расширить класс событий для создания собственного события с дополнительными параметрами. Размещение функций в addEventListener (анонимные функции) является рецептом для утечек памяти, который не хорош. Смотрите на следующее.

import flash.events.Event;

//custom event class to enable the passing of strings along with the actual event
public class TestEvent extends Event
{
    public static const TYPE1 :String = "type1";
    public static const TYPE2 :String = "type2";
    public static const TYPE3 :String = "type3";

    public var parameterText:String;

    public function TestEvent (type:String, searchText:String)
    {
        this.parameterText = searchText;
        super(type);
    }

}

когда Вы создаете новое событие такой как

dispatchEvent(new TestEvent(TestEvent.TYPE1, 'thisIsTheParameterText'))" ;

можно затем прислушаться к тому событию как это

someComponent.addEventListener(TestEvent.TYPE1, listenerFunction, true , 0, true);

и в функциональном 'listenerFunction' event.parameterText будет содержать Ваш параметр.

таким образом в Вашем myClips компоненте Вы исчерпали бы пользовательское событие и прислушались бы к тому событию а не событию Click.

7
ответ дан 6 December 2019 в 09:23
поделиться

Можно выполнить это путем вытаскивания обработчика из функции, которая дает переменное закрытие, как это:

for (var i=0; i<5; i++) {
    myClips[i].addEventListener( MouseEvent.CLICK, getHandler(i) );
}

function getHandler(i) {
    return function( e:MouseEvent ) {
        test(i);
    }
}

function test( j ) {
    trace("foo "+j);
}

Кроме того, что касается того, почему это создает новое закрытие, Вы могли бы хотеть проверить объяснение в принятый ответ на этот подобный вопрос.

2
ответ дан 6 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: