Formatação Condicional no FLEX[RESOLVIDO]

6 respostas
L

Pessoal,

Tenho um TextInput que pega a situação do produto no Banco: Disponivel e Indisponivel.

Quando é indisponivel quero que aparece em vermelho e o disponivel em verde.

Tentei manipular no código, porem o elemente Textnput nao tem propriedade COLOR.

O que posso fazer?

Obrigado

6 Respostas

Andre_Brito

Acho que dá pra usar Style no TextInput. Se der, você pode fazer isso usando CSS, eu acho.

R

Lembre que sempre que você quer mudar um estilo via programação, você sempre deve usar o setStyle:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1024" minHeight="768">
	<mx:Script>
		<![CDATA[
			
			
			private function clickHandler(color:uint):void
			{
				ti.setStyle("color", color);
			}
			
		]]>
	</mx:Script>
	
	<mx:TextInput id="ti" text="lalalalala" />
	<mx:Button label="red" click="clickHandler(0xFF0000)"  x="0" y="95"/>
	<mx:Button label="green" click="clickHandler(0x00FF00)"  x="0" y="66"/>
</mx:Application>

[]'s

L
Rafael M. Martinelli:
Lembre que sempre que você quer mudar um estilo via programação, você sempre deve usar o setStyle:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1024" minHeight="768">
	<mx:Script>
		<![CDATA[
			
			
			private function clickHandler(color:uint):void
			{
				ti.setStyle("color", color);
			}
			
		]]>
	</mx:Script>
	
	<mx:TextInput id="ti" text="lalalalala" />
	<mx:Button label="red" click="clickHandler(0xFF0000)"  x="0" y="95"/>
	<mx:Button label="green" click="clickHandler(0x00FF00)"  x="0" y="66"/>
</mx:Application>

[]'s

Ok ,

Deu certo com setStyle, eu tinha usado, mas nao tinha colocado a propriedade color como String, aí nao tava dando.

O Problema agora é o seguinte. Eu tenho um grid que lista todos os produtos. Ao clicar em um produto, o TextInput é alimentado com o mesmo dado que está na grid (SelectedItem). Eu tentei inserir essa funcao em evento Change e nao deu:

private function mudaCorSituacao():void{
				
				if(situacao_imovel.text == "Disponível"){
					situacao_imovel.setStyle("color", "0xFF0000");
				}
				else{
					situacao_imovel.setStyle("color", "0x00FF00");
				}
				
			}
R

Abaixo vc tem uma das possíveis maneiras de fazer. No caso, o change só é disparado quando o usuário altera o dado do TextInput. Também não é possível usar dataChange, pois ele só é disparado ao alterar o valor da propriedade data. Neste caso foi usado o evento valueCommit, que é disparado quando se altera qualquer propriedade do componente. Cuidado ao usar esse evento, pois como ele é disparado para qq propriedade, vc pode ter alguns problemas.

Vc ainda poderia usar mx:Bindings, fazer sua lógica no change do DataGrid ou colocar um addEventLintener na propriedade text.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
	<mx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
			
			
			protected function ti_valueCommitHandler(event:FlexEvent):void
			{
				var myTi:TextInput = TextInput(event.target);
				if (myTi.text == "Christina Coenraets")
				{
					myTi.setStyle("color", 0xFF0000);
				}
				else
				{
					myTi.setStyle("color", 0x00FF00);
				}
			}

		]]>
	</mx:Script>
	<mx:XMLList id="employees">
		<employee>
			<name>Christina Coenraets</name>
			<phone>555-219-2270</phone>
			<email>[email removido]</email>
			<active>true</active>
		</employee>
		<employee>
			<name>Joanne Wall</name>
			<phone>555-219-2012</phone>
			<email>[email removido]</email>
			<active>true</active>
		</employee>
		<employee>
			<name>Maurice Smith</name>
			<phone>555-219-2012</phone>
			<email>[email removido]</email>
			<active>false</active>
		</employee>
		<employee>
			<name>Mary Jones</name>
			<phone>555-219-2000</phone>
			<email>[email removido]</email>
			<active>true</active>
		</employee>
	</mx:XMLList>

	<mx:TextInput id="ti" text="{dg.selectedItem.name}" valueCommit="ti_valueCommitHandler(event)" />
	
	<mx:DataGrid id="dg" width="100%" height="100%" rowCount="5" dataProvider="{employees}">
		<mx:columns>
			<mx:DataGridColumn dataField="name" headerText="Name"/>
			<mx:DataGridColumn dataField="phone" headerText="Phone"/>
			<mx:DataGridColumn dataField="email" headerText="Email"/>
		</mx:columns>
	</mx:DataGrid>

</mx:Application>

[]'s

L

Pessoal,

Muito Obrigado. Resolve colocando no Evento Click do Grid.

Abraço.

R

Melhor vc colocar no change do DataGrid.

[]'s

Criado 26 de outubro de 2009
Ultima resposta 26 de out. de 2009
Respostas 6
Participantes 3