コンボボックス

コンボボックスは<combobox><datacombobox>の2種類あります。

<combobox>と<datacombobox>の違い

  • アイテムリストの持ち方
<combobox><textlistitem>を使って<combobox>タグ内に設定します。全アイテムを一気に即時生成するのでアプリ初期起動時に負荷がかかることがありますが、実行中は速くなります。
<datacombobox>データセットに設定します。アイテムは必要時に生成されるのでアプリ初期起動が速くなりますが、実行中に負荷がかかることがあります。

両者は良く似ていますが、全く別物と思ってOKです。使える属性、メソッド、イベント、見た目の挙動に違いがあります。どちらを選ぶかは使いたい属性やメソッドのあるほう、となります(^^;)

  • 属性
<combobox><datacombobox>
attachoffset -
autoscrollbar -
bordersize -
dataoption -
defaultselection -
defaulttext
editable -
ismenu -
isopen
itemclassname
itemdatapath -
listattach -
listwidth -
menuclassname -
min_width -
selected
selectfirst -
shownitems
spacing -
statictext -
textdatapath -
text_width -
text_x -
text_y -
value
valuedatapath -
  • メソッド
<combobox><datacombobox>
addItem -
clearSelection -
getItem -
getItemAt -
getItemIndex -
getSelection -
getText
getValue
removeItem -
removeItemAt -
select -
selectItem
selectItemAt
setChanged -
setDefaultSelection -
setItemclassname -
setOpen
setText -
setValue -
setWidth -
toggle
  • イベント
<combobox><datacombobox>
oncomboblur -
oncombofocus -
ondefaultselection -
onselect
onselected -
onisopen -

文字列の縦位置を合わせる

<datacombobox>と<combobox>は文字列の縦位置が違います。<datacombobox>のほうが若干上寄りなのでthis._text.setAttribute('y',3)で調整します。

※<datacombobox>のソースを見ると _textビュー のy属性が0だったので、3にしてみたらうまくいっただけです。

下記サンプルは、左が<datacombobox>、右が<combobox>、です。

この内容を表示するためには Adobe Flash Plugin が必要です。

<?xml version="1.0" encoding="UTF-8"?>
<canvas proxied="false" bgcolor="0xeeeeee">
 
<dataset name="ds" >
  <item value="30">りんご</item>
  <item value="60">みかん</item>
  <item value="90">いちご</item>
  <item value="50">メロン</item>
  <item value="20">ぶどう</item>
</dataset>
 
<simplelayout spacing="10"/>
 
<text>▼デフォルトでは、文字列の縦位置が微妙にずれている</text>
<hbox spacing="5">
  <datacombobox itemdatapath="ds:/item" />
  <combobox editable="false">
    <textlistitem datapath="ds:/item" text="$path{'text()'}" value="$path{'@value'}"/>
  </combobox>
</hbox>
 
<text>▼文字列の縦位置が合うようにした</text>
<hbox spacing="5">
  <datacombobox itemdatapath="ds:/item" oninit="this._text.setAttribute('y',3)"/>
  <combobox editable="false">
    <textlistitem datapath="ds:/item" text="$path{'text()'}" value="$path{'@value'}"/>
  </combobox>
</hbox>
 
</canvas>

<combobox>

基本形1

<combobox>タグ内に<textlistitem>でtext:valueを列挙します。

この内容を表示するためには Adobe Flash Plugin が必要です。

<?xml version="1.0" encoding="UTF-8"?>
<canvas proxied="false" bgcolor="0xeeeeee">
 
<simplelayout axis="x"/>
 
<combobox id="dc" editable="false">
  <textlistitem value="30">りんご</textlistitem>
  <textlistitem value="60">みかん</textlistitem>
  <textlistitem value="90">いちご</textlistitem>
  <textlistitem value="50">メロン</textlistitem>
  <textlistitem value="20">ぶどう</textlistitem>
</combobox>
 
<text text="${dc.text + ':' + dc.value}"/>
 
</canvas>

基本形2

データセットからアイテムを取得することもできます。<textlistitem>にdatapathを設定します。

この内容を表示するためには Adobe Flash Plugin が必要です。

<?xml version="1.0" encoding="UTF-8"?>
<canvas proxied="false" bgcolor="0xeeeeee">
 
<dataset name="ds" >
  <item value="30">りんご</item>
  <item value="60">みかん</item>
  <item value="90">いちご</item>
  <item value="50">メロン</item>
  <item value="20">ぶどう</item>
</dataset>
 
<simplelayout axis="x"/>
 
<combobox id="dc" editable="false">
  <textlistitem datapath="ds:/item" text="$path{'text()'}" value="$path{'@value'}"/>
</combobox>
 
<text text="${dc.text + ':' + dc.value}"/>
 
</canvas>

<datacombobox>

選択アイテムのインデックス取得

選択したアイテムが上から何番目かを取得するにはgetItemIndex()メソッドを使います。引数はvalueです。

1番目の数値は0です。

この内容を表示するためには Adobe Flash Plugin が必要です。

<?xml version="1.0" encoding="UTF-8"?>
<canvas proxied="false" bgcolor="0xeeeeee">
 
<dataset name="ds" >
  <item value="30">りんご</item>
  <item value="60">みかん</item>
  <item value="90">いちご</item>
  <item value="50">メロン</item>
  <item value="20">ぶどう</item>
</dataset>
 
<simplelayout axis="x"/>
 
<datacombobox id="dc" itemdatapath="ds:/item" />
 
<text>
  <handler name="onselect" reference="dc" >
    setText(dc.getItemIndex(dc.value) + ":" + dc.text + ":" + dc.value);
  </handler>
</text>
 
</canvas>

無効化(中途半端)

コンボボックスを使えないようにグレーアウト表示して無効化するには、enabled属性をfalseにすればOKです。

しかし、確かにグレーアウト&無効にはなるものの、実際にはクリック可能で一覧リストが見えてしまい、うごいているように見えてしまいます。

この内容を表示するためには Adobe Flash Plugin が必要です。

<?xml version="1.0" encoding="UTF-8"?>
<canvas proxied="false" bgcolor="0xeeeeee">
  <dataset name="ds" >
    <item value="30">りんご</item>
    <item value="60">みかん</item>
    <item value="90">いちご</item>
  </dataset>
  <simplelayout axis="x" spacing="20"/>
  <radiogroup id="r">
    <radiobutton value="0">有効</radiobutton>
    <radiobutton value="1">無効</radiobutton>
  </radiogroup>
  <datacombobox itemdatapath="ds:/item" >
    <handler name="onselect" reference="r">
      if(r.value==0){
        this.setAttribute('enabled',true);  
      }else if(r.value!=0){
        this.setAttribute('enabled',false);
      }
    </handler>
  </datacombobox>
</canvas>

無効化(完全)

<datacombobox>のソースにあるbkgndビューのclickable属性をfalseにするとクリック不能になり完全に無効化できます。

this.bkgnd.setAttribute('clickable',false);

この内容を表示するためには Adobe Flash Plugin が必要です。

<?xml version="1.0" encoding="UTF-8"?>
<canvas proxied="false" bgcolor="0xeeeeee">
  <dataset name="ds" >
    <item value="30">りんご</item>
    <item value="60">みかん</item>
    <item value="90">いちご</item>
  </dataset>
  <simplelayout axis="x"/>
  <radiogroup id="r">
    <radiobutton value="0">有効</radiobutton>
    <radiobutton value="1">無効</radiobutton>
  </radiogroup>
  <datacombobox itemdatapath="ds:/item" >
    <handler name="onselect" reference="r">
      if(r.value==0){
        this.setAttribute('enabled',true);  
        this.bkgnd.setAttribute('clickable',true);  // クリック有効化
      }else if(r.value==1){
        this.setAttribute('enabled',false);
        this.bkgnd.setAttribute('clickable',false); // クリック無効化
      }
    </handler>
  </datacombobox>
</canvas>
コンボボックス.txt · 最終更新: 2009/10/18 03:36 (外部編集)
Copyright © 2008~ずっと ason(minamotonoason@gmail.com)

chuumap 中小企業ツイッターマップ 製造、加工、卸などB2B主体の個人事業者、中小企業のツイッターを、グーグルマップの住所の位置に正確に表示。
tentwi 店舗でツイート 飲食店、販売店など、一般消費者向けの店舗を構えるお店ツイッターを、グーグルマップの住所の位置に正確に表示。
廃句ったー あなたのツイッターの最近のツイートから廃句もとい俳句を生成。
みかけったー 超人気!あなたのツイッターの最近のツイートからみかけの年齢と性別を診断。
キキキーったー 最近のツイートからキーの使用回数をしらべます。
SLOTTER(すろったー) あなたのツイッターのタイムラインのアイコンでスロット。FLASHゲーム。
MultiLangTweet 一度に48ヶ国語に翻訳してツイート。
英訳ったー 英訳または日本語訳してツイート。
バンドメンバー募集サイト シンプルなバンドメンバー募集サイト。
CMS総合デモサイト 有名オープンソースCMS、EC、SNS、Wikiを一度に全部体験できる総合デモサイト
ビズロック BizRock(ビズロック)~音楽ライブでプレゼン!情熱型ビジネス交流会