Flex 4 Desktop App TooltipManager

时间:2011-03-07 22:47:26

标签: flex tooltip

我有一个以前是基于互联网的应用的灵活应用。在其中我有一个函数,当我告诉它创建一个错误消息时,它会创建工具提示错误消息。我把这个应用程序逐字地移到一个桌面应用程序并重新构建了一些东西以使其运行,但我没有搞乱mxml文件的核心基础,除了从一种类型的更改根标签之外还利用它:组'到':窗口'

所有内容都正常运行,但工具提示未显示。我似乎无法弄明白为什么,所以我想我会帮你们这样做。这是工具提示代码(fx:script cdata标签中的内联mxml代码):

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 :(得分:0)

要解决此问题,您必须将调用'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(“my message”,invalidComponent),并清除错误,只需调用ErrorUtils.clearAllErrors()

这样,如果你有一个表单,并且你有一个验证函数,你只需在每次返回无效时调用该函数。唯一缺少的是清除特定错误的任何方式,但要处理它可以将所有创建调用放在主验证函数中,验证表单中的所有字段,然后每次调用你获得或忽略了一个字段,并在函数开头调用'ErrorUtils.clearAllErrors()'。

顺便说一句: 这是我收到的原始教程的来源,我只是抽象了一下 http://aralbalkan.com/1125 所以积分转到上面的网站获取原始代码