2010-05-26 22 views
9

Estoy mostrando una lista de botones, algunos de los cuales pueden estar deshabilitados. Necesito mostrar una información sobre herramientas en los botones desactivados con una explicación de por qué está deshabilitada, pero parece que no puedo deshabilitar el botón sin desactivar la información sobre herramientas. ¿Hay una forma simple de evitar esto?cómo mostrar una información sobre herramientas en un control deshabilitado?

+0

Estoy usando la clase spark.components.Button – geo

+0

¿Has resuelto esto? – zinovii

Respuesta

-1

Deberá utilizar la clase ToolTipManager para crear y destruir las sugerencias de herramienta manualmente.

En este artículo se le debe dar toda la información que necesita para lograr esto:
http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf60d65-7ff6.html

+0

Consideré usar ToolTipManager en mi solución, pero esto fue difícil porque el botón de chispa no despacha los eventos del mouse cuando está deshabilitado, por lo que tendría que usar otra forma de detectar cuando el usuario está sobre el botón. La solución más simple que encontré fue simplemente crear botones invisibles adicionales sobre los botones desactivados y usar su comportamiento incorporado en la información sobre herramientas. No es ideal, lo sé. – geo

+0

Está en lo cierto, el botón de chispa no provoca eventos de mouse cuando está deshabilitado, a pesar de indicar explícitamente que lo hace en la documentación. ¿Eres capaz de usar un botón Halo como alternativa? (A menos que esté haciendo un destello funky, supongo) He presentado un informe de error con Adobe sobre la documentación del botón Spark. –

0
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> 
    <mx:Script> 
     <![CDATA[ 
     import mx.managers.ToolTipManager; 
     import mx.controls.ToolTip; 
     private var tooltip:ToolTip; 
     private var p:Point; 

     private function whyDisable():void 
     { 

      //calculate the button position , so that roll over shows the tooltip 
      p=new Point(); 
      p=localToGlobal(new Point(btn.x,btn.y)); 
      if(btn.enabled==false) 
       tooltip = ToolTipManager.createToolTip('Button is disabled',p.x+(btn.width/2),p.y-20,'errorTipAbove') as ToolTip; 
      else 
       tooltip=ToolTipManager.createToolTip('Button is enabled',p.x+(btn.width/2),p.y-20,'errorTipAbove') as ToolTip; 
     } 
     ]]> 
    </mx:Script> 
    <mx:VBox height="100%" width="100%" horizontalAlign="center" verticalAlign="middle"> 
     <mx:Button id="btn" label="Show Tooltip" buttonDown="trace('ankur')" autoRepeat="true" enabled="true" rollOver="whyDisable();" rollOut="{ToolTipManager.destroyToolTip(tooltip);}"/> 
    </mx:VBox> 
</mx:Application> 

Hola, esta aplicación funciona con el botón discapacitados, solía ToolTipManager a ello,

i espero que esto funcione para usted

tienen un tiempo gr8

Ankur Sharma

+0

gracias por el ejemplo, desafortunadamente estoy usando la clase spark.components.Button, que establece mouseEnabled y mouseChildren en false cuando está habilitado se establece en falso. Esto significa que no puedo usar eventos de renovación. – geo

15

Ajuste el botón en un grupo y en su lugar, aplique la información sobre herramientas al grupo.

<s:Group toolTip="My toolTip"> 
    <s:Button enabled="false"/> 
</s:Group> 

Es un poco feo, pero funciona.

1

Una forma de hacer esto es anular el getter y setter habilitados para hacer lo que desee. Entonces, en mi caso, todavía quería que la mayoría de los eventos de mouse se dispararan, pero no el evento click.

<?xml version="1.0" encoding="utf-8"?> 
<s:Button buttonMode="true" click="handleClick(event)" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark"> 
    <fx:Script> 
     <![CDATA[ 
      public var data:Object; 
      private var _enabled:Boolean = true; 

      public override function get enabled():Boolean 
      { 
       return _enabled; 
      } 

      public override function set enabled(value:Boolean):void 
      { 
       _enabled = value; 
       invalidateDisplayList(); 
       dispatchEvent(new Event("enabledChanged")); 
       invalidateSkinState(); 
      } 

      protected function handleClick(event:MouseEvent):void 
      { 
       if (!_enabled) 
       { 
        event.stopPropagation(); 
       } 
      } 
     ]]> 
    </fx:Script> 
</s:Button> 

Dado que los eventos del mouse ahora se activan, la información sobre herramientas vuelve a funcionar.

0

La mejor opción para mí fue poner una etiqueta vacía alrededor y delante del elemento. Luego, si es necesario, configuro el elemento para deshabilitar y la información sobre herramientas funciona en la etiqueta. Si no, puse la etiqueta enviada para atrás. Funciona bastante bien

if (new MainListsAdmin(this.mainApp).temInvestimentoComAqueleTipo(t)) { 
      deletarGroupInto.setTooltip(new Tooltip("Há investimentos vinculados a Tipo de Investimento.\nDeleção bloqueada.")); 
      this.deletarButton.setDisable(true); 
}else{ 
     deletarGroupInto.toBack(); 
} 
Cuestiones relacionadas