Flex 4 Desktop App TooltipManager - PullRequest
       20

Flex 4 Desktop App TooltipManager

0 голосов
/ 08 марта 2011

У меня есть гибкое приложение, которое раньше было интернет-приложением.В нем у меня есть функция, которая создает всплывающие сообщения об ошибках, когда я говорю, чтобы создать сообщение об ошибке.Я дословно вытащил это приложение к настольному приложению и немного изменил структуру, чтобы запустить его, но я не связывался с основными принципами файла mxml, который использует это, кроме изменения корневого тега с типом s:Группа 'to' s: Window '

Все работает правильно, но подсказки не отображаются.Кажется, я не могу понять, почему, поэтому я подумал, что вы, ребята, управляете этим.Вот код всплывающей подсказки (встроенный mxml-код в теге fx: script cdata):

import mx.controls.ToolTip;
import mx.managers.ToolTipManager;

public var errorTip:ToolTip;    
private function createErrorMsg(errorMsg:String, object:Object):void {              
    if (errorTip){ToolTipManager.destroyToolTip(errorTip);};
    errorTip = ToolTipManager.createToolTip(errorMsg,object.getBounds(root).x + object.width,object.getBounds(root).y) as ToolTip;
    errorTip.setStyle("styleName", "errorTip");
    errorTip.visible = true;
    errorTip.enabled = true;
}

Обычно я передаю функции строку и объект (ввод текста, флажок, кнопку и т. Д. И т. Д....) и он позиционирует его и отображает сообщение об ошибке.Это полностью работает в моей веб-версии, но не в настольной версии.

Вот код, который создает окно:

var window:LoginWindow = new LoginWindow();
Window.systemChrome = NativeWindowSystemChrome.NONE;
Window.transparent = true;
Window.open(true);
Window.maximize()

Есть идеи?


Кроме того, я проверяю, существует ли errorTip в начале функции, а затем уничтожаю ее, чтобы переменная с более высокой областью действия errorTip всегда равнялась ссылке на отображаемую в данный момент ошибку.Это позволяет мне просто уничтожить эту подсказку об ошибке при проверке формы, а затем снова проверить ее, но позволяет отображать только одну подсказку за раз.Есть ли лучший способ запросить диспетчер всплывающих подсказок обо всех отображаемых в данный момент всплывающих подсказках и уничтожить их все?

1 Ответ

0 голосов
/ 05 апреля 2011

Чтобы решить эту проблему, вы должны изменить строку, которая вызывает 'createTooltip' на следующее:

errorTip = ToolTipManager.createToolTip(errorMsg,object.getBounds(root).x + object.width,object.getBounds(root).y, null, object as IUIComponent) as ToolTip;

Идея заключается в том, что теперь вы можете просто вызвать 'createErrorMsg ("myError", myComponent) ", и он отобразит там сообщение об ошибке, после чего вы можете добавить еще одну функцию:

private function clearError():void
{
    if(errorTip) errorTip.visible = false;  
}

чтобы фактически удалить сообщение об ошибке. Недостатком является то, что он отображает только одно сообщение за раз, но я немного его подправлю, чтобы изменить это. Итак, вот мое лучшее решение:

Сообщения об ошибках (традиционно) будут отображаться только в пакетном наборе. (По сути, вы будете иметь только несколько подсказок, отображаемых в определенный момент времени, и все они будут связаны с формой, в которой вы находитесь). Это не всегда будет правдой, но это меня не касается. Я создал служебный класс, который выполняет обработку сообщений об ошибках:

package Utils
{
    import mx.controls.ToolTip;
    import mx.core.IUIComponent;
    import mx.managers.ToolTipManager;

    public class ErrorUtils
    {
        private static var errorCache:Array = new Array();

        public function ErrorUtils()
        {

        }

        public static function createErrorMsg(errorMsg:String, object:Object):void {
            var errorTip:ToolTip = ToolTipManager.createToolTip(errorMsg,object.getBounds(object.root).x + object.width,object.getBounds(object.root).y, null, object as IUIComponent) as ToolTip
            errorTip.setStyle("styleName", "errorTip"); 
            errorTip.visible = true;
            errorTip.enabled = true;

            var position:int = errorCache.length;
            errorCache.push(errorTip);
        }   

        public static function clearAllErrors():void
        {
            for each(var error:ToolTip in errorCache)
            {
                ToolTipManager.destroyToolTip(error);
            }
        }   
    }
}

Чтобы использовать класс, вы просто вызываете ErrorUtils.createErrorMsg («мое сообщение», invalidComponent), а для очистки ошибок просто вызываете ErrorUtils.clearAllErrors ()

Таким образом, если у вас есть форма и для нее есть функция проверки, вы просто вызываете эту функцию каждый раз, когда она возвращается как недействительная. Единственное, чего здесь не хватает, - это какого-либо способа очистки конкретной ошибки, но для ее обработки вы можете поместить все вызовы создания в основную функцию проверки, которая проверяет все поля в вашей форме, а затем вызывать ее каждый раз. вы получаете или теряете фокус на поле и вызываете ErrorUtils.clearAllErrors () в начале функции.

КСТАТИ: это исходный учебник, который я получил для этого, я просто немного его абстрагировал http://aralbalkan.com/1125 поэтому кредиты перейти на вышеуказанный сайт для оригинального кода

...