2010-05-26 6 views
9

Sto visualizzando un elenco di pulsanti, alcuni dei quali potrebbero essere disabilitati. Devo mostrare un suggerimento sui pulsanti disabilitati con una spiegazione del motivo per cui è disabilitato, ma sembra che non possa disabilitare il pulsante senza disattivare il suggerimento. C'è un modo semplice per aggirare questo?come mostrare un suggerimento su un controllo disabilitato?

+0

Sto utilizzando la classe spark.components.Button – geo

+0

Hai risolto questo problema? – zinovii

risposta

-1

È necessario utilizzare la classe ToolTipManager per creare e distruggere manualmente i suggerimenti.

Questo articolo dovrebbe darvi tutte le informazioni necessarie per raggiungere questo obiettivo:
http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf60d65-7ff6.html

+0

Ho considerato l'utilizzo di ToolTipManager nella mia soluzione, ma questo è stato difficile perché il pulsante di accensione non invia eventi del mouse quando è disabilitato, quindi dovrei usare un altro modo di rilevare quando l'utente è sopra il pulsante. La soluzione più semplice che ho trovato era semplicemente creare pulsanti extra invisibili sopra i pulsanti disabilitati e usare il loro comportamento nel tooltip incorporato. Non ideale, lo so. – geo

+0

Se sei corretto, il pulsante Spark non solleva gli eventi del mouse quando disabilitato, nonostante affermi esplicitamente che ciò avviene nella documentazione. Sei in grado di utilizzare un pulsante Halo come alternativa? (a meno che tu non stia facendo un po 'di skinny funky credo) ho sollevato una segnalazione di bug con Adobe sulla documentazione di Spark Button. –

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> 

Ciao, questa applicazione funziona sul pulsante disattivato, ho usato ToolTipManager per fare questo,

i spero che questo funziona per voi

hanno un tempo gr8

Ankur Sharma

+0

grazie per l'esempio, sfortunatamente sto usando la classe spark.components.Button, che imposta mouseEnabled e mouseChildren su false quando abilitato è impostato su false. Ciò significa che non posso usare eventi di rollover. – geo

15

Avvolgere il pulsante in un gruppo e applicare invece il suggerimento al gruppo.

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

E 'un po' brutto, ma funziona.

1

Un modo per eseguire questa operazione è ignorare il getter e il setter abilitati a fare ciò che si desidera. Nel mio caso, volevo comunque che la maggior parte degli eventi del mouse si attivassero, ma non l'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> 

Poiché gli eventi del mouse ora si attivano, i tooltip funzionano di nuovo.

0

La scelta migliore per me era mettere un'etichetta vuota intorno e davanti all'elemento. Quindi, se necessario, imposto l'elemento da disabilitare e il tooltip funziona nell'etichetta. In caso contrario, ho inviato l'etichetta indietro. Funziona piuttosto bene.

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(); 
} 
Problemi correlati