【AIR & Flex3】 コンボボックスのテスト

  カスタムコンポーネント





http://lightbox.on.coocan.jp/download/flex3_air_combo.lzh



コンボボックスのカスタムコンポーネントを作成して、その基本的な機能をテストしています。



  コンポーネントのソースコード



LboxCombo.mxml
  
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox
	xmlns:mx="http://www.adobe.com/2006/mxml"
	creationComplete="initCombo(event)" 
>

<mx:Script>
<![CDATA[

	import mx.events.*;
	import mx.collections.*;

	private	var arc:ArrayCollection = new ArrayCollection();

	// *****************************************************
	// データ追加
	// *****************************************************
	public function add(txt:String,data:Object):void {

		var option:Object = new Object();

		// 表示テキスト
		option.label = txt;
		// データ
		option.data = data;
		// 追加された時の index
		option.cnt = arc.length;

		arc.addItem(option);
		this.dataProvider = arc;

	}

	// *****************************************************
	// 選択
	// *****************************************************
	public function selectByValue(value:Object):void {
	
		var max:int = arc.length;
		var i:int = 0;

		for( i = 0; i < max; i++ ) {
			if ( arc.source[i].data == value ) {
				this.selectedIndex = i;
				break;
			}
		}
	
	}

	// *****************************************************
	// 選択
	// *****************************************************
	public function selectByText(value:String):void {
	
		var max:int = arc.length;
		var i:int = 0;

		for( i = 0; i < max; i++ ) {
			if ( arc.source[i].label == value ) {
				this.selectedIndex = i;
				break;
			}
		}
	
	}

	// *****************************************************
	// 選択された値
	// *****************************************************
	public function get selectedValue():Object {
		if ( this.selectedIndex == -1 ) {
			return "";
		}
		else {
			return arc.source[this.selectedIndex].data;
		}
	} 
	// *****************************************************
	// 選択されたテキスト
	// *****************************************************
	public function get selectedText():String {
		if ( this.selectedIndex == -1 ) {
			if ( this.prompt == null ) {
				return "";
			}
			else {
				return this.prompt;
			}
		}
		else {
			return arc.source[this.selectedIndex].label;
		}
	} 
	// *****************************************************
	// グループ番号
	// *****************************************************
	private var _group:int = 0;
	public function get group():int {
			return _group;
	} 
	public function set group(value:int):void {
			_group = value;
	} 

	private function initCombo(e:FlexEvent):void {
		trace(e);
	}

]]>
</mx:Script>

</mx:ComboBox>
  



  Mainw.mxml

初期処理として、コンボボックスにデータを追加しています。

----------------------------------------------------------------------------------------------------------
データ追加は、カスタムコンポーネントに実装した、add メソッド で行ないます。
実際に追加される場所は、arc:ArrayCollection で、dataProvider プロパティにセット
する事によって、表示されます。

ArrayCollection にセットされる実際のデータはこの場合 Object であり、label と data というプロパティ
を作成してデータを設定後 ArrayCollection に追加しています。

ですから、データを参照する場合は、この Object が、selectedItem で参照されます。
また内部では、ArrayCollectionsource[n] プロパティで参照されます
( これは、外部から dataProvider 経由でも参照可能な事を意味します )

----------------------------------------------------------------------------------------------------------
selectedIndex プロパティは、もとからあるプロパティで、-1 を設定すると未選択状態になります。
その際に表示するテキストを、prompt プロパティで設定(画面定義側) しています。

----------------------------------------------------------------------------------------------------------
selectedLabel はもとからあるプロパティで、未選択の場合は prompt が無い場合は null
ある場合は "" を返しますが、追加プロパティの selectedText では、未選択の場合は prompt が
無い場合は "" で、ある場合は prompt の内容を返します。

  
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
	xmlns:mx="http://www.adobe.com/2006/mxml"
	initialize="initData();"
	xmlns="*"
>

<mx:Style>

	.labelAlign {
		textAlign: left;
	}
	.testButton {
		fillColors: #5EBCDB,#FFFFFF;
	}

</mx:Style>

<mx:Script>
<![CDATA[

	import mx.core.*;

	// *********************************************************
	// アプリケーションの初期化
	// *********************************************************
	public function initData():void {

		// メッセージ
		trace( "initData()" );

		act.add("新規", 1);
		act.add("修正", 2);
		act.add("削除", 9);

		// どのデータも選択しない
		act.selectedIndex = -1;

		// 内部データの参照
		trace(act.dataProvider.source[2].data);

	}

	// *********************************************************
	// 変更されたコンボボックスの内容
	// *********************************************************
	public function dispData():void {

		// メッセージ
		trace(
			 act.selectedLabel + "," +
			 act.selectedItem.label + "," +
			 act.selectedItem.data + "," +
			 act.selectedItem.cnt
		);

	}

]]>
</mx:Script>

<mx:Form width="90%" height="90%">
	<mx:FormHeading label="コンボボックスのテスト"/>
	
	<mx:FormItem
		label="処理区分"
		labelStyleName="labelAlign"
		 paddingBottom="30"
	>
		<!-- ****************************************** -->
		<!-- ユーザコンボボックス -->
		<!-- ****************************************** -->
		<LboxCombo
			id="act" 
			prompt="選択されない場合のテキスト"
			change="dispData();"
		/>
	</mx:FormItem>

	<!-- ****************************************** -->
	<!-- 機能テストボタン -->
	<!-- ****************************************** -->

	<mx:FormItem label="開閉" labelStyleName="labelAlign">
		<mx:Button
			label="コンボボックスを開く"
			click="act.open();"
			styleName="testButton"
			width="250"
		/>
	</mx:FormItem>

	<mx:FormItem labelStyleName="labelAlign">
		<mx:Button
			label="コンボボックスを閉じる"
			click="act.close();"
			styleName="testButton"
			width="250"
		/>
	</mx:FormItem>

	<mx:FormItem label="選択" labelStyleName="labelAlign">
		<mx:Button
			label="数値 "1" でコンボボックスを選択"
			click="act.selectByValue(1);"
			styleName="testButton"
			width="250"
		/>
	</mx:FormItem>

	<mx:FormItem labelStyleName="labelAlign">
		<mx:Button
			label=""修正"でコンボボックスを選択"
			click="act.selectByText('修正');"
			styleName="testButton"
			width="250"
		/>
	</mx:FormItem>

	<mx:FormItem label="取得" labelStyleName="labelAlign">
		<mx:Button
			label="選択されたテキスト"
			click="trace(act.selectedText);"
			styleName="testButton"
			width="250"
		/>
	</mx:FormItem>

	<mx:FormItem labelStyleName="labelAlign">
		<mx:Button
			label="選択された値"
			click="trace(act.selectedValue);"
			styleName="testButton"
			width="250"
		/>
	</mx:FormItem>

</mx:Form>

</mx:WindowedApplication>
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ