【问题标题】:Flex 4 Desktop App TooltipManagerFlex 4 桌面应用工具提示管理器
【发布时间】:2023-03-07 15:47:01
【问题描述】:

我有一个弹性应用程序,它曾经是一个基于互联网的应用程序。在其中我有一个函数,当我告诉它创建错误消息时,它会创建工具提示错误消息。我将这个应用程序逐字提取到桌面应用程序中,并对其进行了一些重组以使其运行,但我并没有弄乱 mxml 文件的核心基础,该文件利用了这一点,除了将根标记从 's 类型更改为:分组'到's:Window'

一切运行正常,但工具提示未显示。我似乎无法弄清楚为什么,所以我想我会由你们来运行这个。这是工具提示代码(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' 始终等于对当前显示的错误的引用。这使我可以在表单验证中销毁该错误提示,然后再次进行错误检查,但它一次只允许显示一个工具提示。有没有更好的方法来查询工具提示管理器以获取所有当前显示的工具提示并将它们全部销毁?

【问题讨论】:

  • 我还想指出,我正在使用此设置,因为工厂错误工具提示系统要求您在显示工具提示之前将注意力集中在无效的字段上,而且并不总是很明显该字段无效。

标签: apache-flex tooltip


【解决方案1】:

要解决此问题,您必须将调用“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 所以学分去上面的网站获取原始代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 2012-06-23
    • 2010-10-29
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2011-04-27
    • 2014-10-04
    相关资源
    最近更新 更多