2010-05-26 6 views
9

Wyświetlam listę przycisków, z których niektóre mogą być wyłączone. Muszę pokazać etykietkę na wyłączonych przyciskach z wyjaśnieniem, dlaczego jest wyłączona, ale wydaje się, że nie mogę wyłączyć przycisku bez wyłączania etykiety narzędzi. Czy istnieje prosty sposób obejścia tego?jak wyświetlić etykietkę narzędzia na wyłączonym sterowaniu?

+0

Używam klasy spark.components.Button – geo

+0

Rozwiązałeś to? – zinovii

Odpowiedz

-1

Będziesz musiał użyć klasy ToolTipManager, aby ręcznie tworzyć i niszczyć wskazówki narzędzia.

Ten artykuł powinien dać Ci wszystkie informacje potrzebne do osiągnięcia tego celu:
http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf60d65-7ff6.html

+0

Rozważałem użycie ToolTipManagera w moim rozwiązaniu, ale było to trudne, ponieważ przycisk iskry nie wywołuje zdarzeń myszy, gdy jest wyłączony, więc musiałbym użyć innego sposobu wykrywania, kiedy użytkownik znajduje się nad przyciskiem. Najprostszym rozwiązaniem, które znalazłem, było po prostu utworzenie dodatkowych niewidocznych przycisków na wierzchu wyłączonych przycisków i użycie ich wbudowanej obsługi podpowiedzi. Nie idealny, wiem. – geo

+0

Masz rację, przycisk Spark nie wywołuje zdarzeń myszy po wyłączeniu, pomimo wyraźnego stwierdzenia, że ​​działa w dokumentacji. Czy możesz użyć Halo Button jako alternatywy? (chyba że wykonujesz jakąś efektowną skórkę, jak sądzę) Podniosłem raport o błędzie z Adobe o dokumentacji 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> 

Cześć, to aplikacja działa na przycisku niepełnosprawnych, użyłem ToolTipManager to zrobić,

I nadzieję, że to działa dla Ciebie

mają gr8 czas

Ankur Sharma

+0

dziękuję za przykład, niestety używam klasy spark.components.Button, która ustawia wartość mouseEnabled i mouseChildren na false, gdy włączone jest ustawione na false. Oznacza to, że nie mogę używać zdarzeń najazdu. – geo

15

Owiń przycisk w grupie i zamiast tego zastosuj etykietę narzędzia do grupy.

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

To trochę brzydkie, ale działa.

1

Jednym ze sposobów jest zastąpienie aktywowanego programu pobierającego i ustawiającego, aby zrobił to, co chcesz. Tak więc w moim przypadku nadal chciałem, aby większość zdarzeń myszy była uruchamiana, a nie kliknięcie.

<?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> 

Ponieważ zdarzenia myszy są teraz uruchamiane, podpowiedzi działają ponownie.

0

Najlepszym wyborem dla mnie było umieszczenie pustej etykiety wokół i przed elementem. Następnie, jeśli to konieczne, ustawiam element, aby wyłączyć, a etykieta narzędzia działa na etykiecie. Jeśli nie, położyłem etykietę do tyłu. Działa całkiem nieźle.

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