Flex: Определите, показывает ли компонент

У меня нет машины с SSL для проверки, но с openssl s_client -connect 192.168.0.1:port вы можете увидеть, обрабатывается ли фактическое рукопожатие. Я не знаю, какой порт использует db2cli.

11
задан Michael Brewer-Davis 16 January 2009 в 23:03
поделиться

4 ответа

UIComponent.visible не обязательно допустим для детей объекта где visible=false. Из документов:

"Или в случае дети объекта не испустят шоу или скроют событие, если объект конкретно не записал реализацию, чтобы сделать так".

Я записал пример приложения, который подтверждает это, чтобы быть верным. То, что можно сделать, идут по проверке дисплейного списка видимый, чтобы быть ложью на родителе. В основном "видимый" дает ложные положительные стороны, но не должен давать ложные отрицательные стороны. Вот быстрая утилита, которую я соединил:

package
{
    import flash.display.DisplayObject;

    import mx.core.Application;

    public class VisibilityUtils
    {
        public static function isDisplayObjectVisible(obj : DisplayObject) : Boolean {
            if (!obj.visible) return false;
            return checkDisplayObjectVisible(obj);
        }

        private static function checkDisplayObjectVisible(obj : DisplayObject) : Boolean {
            if (!obj.parent.visible) return false;
            if (obj.parent != null && !(obj.parent is Application))
                return checkDisplayObjectVisible(obj.parent);
            else
                return true;
        }
    }
}

Я не сделал чего-то большего чем тривиальных тестов на этом, но это должно запустить Вас.

5
ответ дан 3 December 2019 в 04:34
поделиться

... или предотвращение рекурсии:

public static function isVisible(obj:DisplayObject):Boolean
{
    while (obj && obj.visible && obj !== Application.application)
    {
        obj = obj.parent;
    }
    return obj && obj.visible;
}
11
ответ дан 3 December 2019 в 04:34
поделиться

Вы хотите проверить, верно ли видимое свойство компонента, и это для всех родителей Вашего компонента в DisplayList, я корректен?

public static function isVisible(c : UIComponent) : Boolean {
    if (c == null) return false;
    if (c is Application) return c.visible;
    return c.visible && isVisible(c.parent);
}
7
ответ дан 3 December 2019 в 04:34
поделиться

Странный, как это кажется, теперь, когда Вы упоминаете это, я не полагаю, что существует простой тест, чтобы определить, на самом деле ли компонент видим на экране в смысле, который подразумевает Component.isShowing ().

Это также верно шоу, и скройтесь, события не пузырятся по умолчанию, поэтому если Вы захотите быть уведомленными относительно изменений видимости в потомке контейнера ViewStack, то необходимо будет прислушаться к ним явно. Детали реализации варьировались бы в зависимости от того, каким поведением Вы были после, но взять простой пример:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:VBox>
        <mx:HBox>
            <mx:Button id="btn1" click="vs.selectedIndex = 0" label="Show 1" />
            <mx:Button id="btn2" click="vs.selectedIndex = 1" label="Show 2" />
        </mx:HBox>
        <mx:ViewStack id="vs" selectedIndex="0">
            <mx:Panel id="panel1">
                <mx:Label id="label1" text="Label 1" show="trace('showing label 1')" hide="trace('hiding label 1')" visible="{panel1.visible}" />
            </mx:Panel>
            <mx:Panel id="panel2">
                <mx:Label id="label2" text="Label 2" show="trace('showing label 2')" hide="trace('hiding label 2')" visible="{panel2.visible}" />
            </mx:Panel>
        </mx:ViewStack>
    </mx:VBox>
</mx:Application>

... Вы будете видеть шоу и скрывать события для каждого огня маркировки, после того как их свойства видимости были связаны с их родительскими панелями. Надо надеяться, это иллюстрирует тезис; можно расширить его однако лучшие иски приложение.Удачи!

1
ответ дан 3 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

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