トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   とにかくFLASH【FLASHに関して全般】
     フォームアプリ作成ノウハウ
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
関たかまさ
Åê¹ÆNo.11383
投稿日時: 2004-10-8 14:33
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: フォームアプリ作成ノウハウ
力になれずスイマセンでした

がんばってください
flower
Åê¹ÆNo.11378
投稿日時: 2004-10-8 14:16
新米
居住地:
投稿: 5
使用環境:
Re: フォームアプリ作成ノウハウ
このソースで動作確認してみましたが、やはり初期値と選択時の値のセットができないようです。
色々とご教授ありがとうございました。
勉強になりました。
もう少しがんばって弄ってみます。

関さん大変ありがとうございました。

関たかまさ
Åê¹ÆNo.11372
投稿日時: 2004-10-8 13:41
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: フォームアプリ作成ノウハウ
えーと、Flexは触ったこと無いのでわからないです、すいません

掲示してもらったソースで検証しました。
一部手を加えてしまったので書いておきますね。
import mx.core.UIComponent
import mx.controls.ComboBox


class ExtraComboRenderer extends UIComponent
{

var Combo : MovieClip;
var listOwner : MovieClip; // the reference we receive to the list
var getCellIndex : Function; // the function we receive from the list
var getDataLabel : Function; // the function we receive from the list
var cards2 = [ {label:"test1", data:1}, {label:"test2", data:2}, {label:"test3", data:3} ];

var layoutHeight = 22;
var layoutWidth = 100;

function ExtraComboRenderer()
{
}

function createChildren(Void) : Void
{
Combo = createClassObject(ComboBox, "ComboBox", 1, {styleName:this, owner:this});
Combo.addEventListener("change", this);
Combo.dataProvider = cards2;
size();
}

// note that setSize is implemented by UIComponent and calls size(), after setting
// __width and __height
function size(Void) : Void
{
Combo.setSize(100, layoutHeight);
Combo._x = (layoutWidth-100)/2;
Combo._y = (layoutHeight-16)/2;
}

function setValue(str:String, item:Object, sel:Boolean) : Void
{
Combo._visible = (item!=undefined);
Combo.editable=true;
Combo.selectedIndex=Number(str);
}

function getPreferredHeight(Void) : Number
{
return 16;
}

function getPreferredWidth(Void) : Number
{
return 100;
}

function change()
{
listOwner.editField(getCellIndex().itemIndex, getDataLabel(), String(Combo.selectedIndex));
}

}

まず、Changeのスペルが違いました(笑)
あとeditFieldでセットする値を選択されている番号にしています。
これでうまく動いてしまいました
これでもだめかなぁ。
flower
Åê¹ÆNo.11369
投稿日時: 2004-10-8 13:19
新米
居住地:
投稿: 5
使用環境:
Re: フォームアプリ作成ノウハウ
関さんありがとうございました。
Rendererのソースなのですが修正してこのようにしました。
import mx.core.UIComponent
import mx.controls.ComboBox


class ComboBoxRenderer extends UIComponent
{

var Combo : MovieClip;
var listOwner : MovieClip; // the reference we receive to the list
var getCellIndex : Function; // the function we receive from the list
var getDataLabel : Function; // the function we receive from the list
var cards2 = [ {label:"test1", data:1}, {label:"test2", data:2}, {label:"test3", data:3} ];


function ComboBoxCellRenderer()
{
}

function createChildren(Void) : Void
{
Combo = createClassObject(ComboBox, "ComboBox", 1, {styleName:this, owner:this});
Combo.addEventListener("chenge", this);
Combo.dataProvider = cards2;
size();
}

// note that setSize is implemented by UIComponent and calls size(), after setting
// __width and __height
function size(Void) : Void
{
Combo.setSize(100, layoutHeight);
Combo._x = (layoutWidth-100)/2;
Combo._y = (layoutHeight-16)/2;
}

function setValue(str:String, item:Object, sel:Boolean) : Void
{
Combo._visible = (item!=undefined);
Combo.editable=true;
Combo.selectedIndex=str;
}

function getPreferredHeight(Void) : Number
{
return 16;
}

function getPreferredWidth(Void) : Number
{
return 100;
}

function chenge()
{
listOwner.editField(getCellIndex().itemIndex, getDataLabel(), Combo.selectedItem);
}

}

環境としては同じだとおもって聞いていたのですが、
FlexのDataGridのRendererとして使用しているのですが、このソースでできないってことはFlexとFlashで違うということなのでしょうか?
関たかまさ
Åê¹ÆNo.11364
投稿日時: 2004-10-8 10:48
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: フォームアプリ作成ノウハウ
おはようございます(^^)
引用:
Combo.getItemAt(1).label;
についてはGrid上にComboBoxの形では表示されているのですが
値が何も表示されない為、setValue()で無理やり規定値を
入れてみていました。

選択値をセットしたいのであれば、selectedIndexで値をセットすれば表示されますよ。

あと、引用:
Combo.editable="true";
もちょっと違いますね。右辺値はBooleanなので文字列ではなくtrueとセットしてくださいな。

試しにちょっとやってみたソースを抜粋してのっけておきますね

■flaの方
var dat = new Array();

for(i = 0;i < 50;i++){
	dat.addItem({aaa:i+"行目",bbb:i % 3});
}
grid.dataProvider = dat;
grid.getColumnAt(1).cellRenderer = "ExtraComboRenderer";

■asの方
function setValue(str:String, item:Object, sel:Boolean) : Void
{
Combo._visible = (item!=undefined);
Combo.dataProvider = cards2;
Combo.editable=true;
//Combo.getItemAt(1).label;

Combo.selectedIndex = str;
}

こんな感じで動いてました。
あともうひとつだけ言わせてもらえるとしたら、ComboBoxは選択イベントがchengeなので、clickよりもchangeイベントで処理したほうがいいと思いますよ
flower
Åê¹ÆNo.11360
投稿日時: 2004-10-8 10:07
新米
居住地:
投稿: 5
使用環境:
Re: フォームアプリ作成ノウハウ
おはようございます。
早速の回答ありがとうございます。
コンストラクタ名・・・・盲点でした(笑)
ご指摘ありがとうございます。
Combo.getItemAt(1).label;
についてはGrid上にComboBoxの形では表示されているのですが
値が何も表示されない為、setValue()で無理やり規定値を
入れてみていました。
コンストラクタ名を修正し、
Combo.dataProvider = cards2;
Combo.editable="true";
をcreateChildren()に戻しCombo.getItemAt(1).label;
は削除してみたのですがデフォルトの値すらいまだ
ComboBoxには表示されない状態です・・・
何が原因なのでしょうか?

関たかまさ
Åê¹ÆNo.11352
投稿日時: 2004-10-7 20:44
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: フォームアプリ作成ノウハウ
えーと、コンストラクタ名違いませんか?(笑)
それはさておき、Rendrerを使ったときにはsetValueメソッドでコントロールするのは既にお分かりだと思いますが、
Combo.getItemAt(1).label;

これは何を意図されてるんでしょうか?

引用:
function setValue(str:String, item:Object, sel:Boolean) : Void
{
trace(str+"/"+item+"/"+sel);

Combo._visible = (item!=undefined);
Combo.dataProvider = cards2;
Combo.editable="true";
Combo.getItemAt(1).label;
}

上記の様にtraceなどで見てもらえればわかるのですが、さまざまな場面でこのMethodはコールされます。
その度にdataProviderにセットして初期化されてしまうので、毎回同じものが選択されているのではないでしょうか?
セットしたとしても、引数strで取得できる値でselectedIndexを設定してあげれば毎回設定された値が表示できると思いますが。

なお、clickイベントで選択番号をセットされているのはOKだと思います。
flower
Åê¹ÆNo.11351
投稿日時: 2004-10-7 20:27
新米
居住地:
投稿: 5
使用環境:
Re: フォームアプリ作成ノウハウ
早速のお返事ありがとうございます。

サンプルのCheckBoxRendererみたいな感じで常時表示で行いたいのです。
ソースは下記の様にしております。

import mx.core.UIComponent
import mx.controls.ComboBox
class ComboBoxRenderer extends UIComponent
{
var Combo : MovieClip;
var listOwner : MovieClip;
var getCellIndex : Function;
var getDataLabel : Function;
var cards2 = [ {label:"test1", data:1}, {label:"test2", data:2}, {label:"test3", data:3} ];


function RadioCellRenderer()
{
}

function createChildren(Void) : Void
{
Combo = createClassObject(ComboBox, "ComboBox", 1, {styleName:this, owner:this});
Combo.addEventListener("click", this);
size();
}

calls size(), after setting
function size(Void) : Void
{
Combo.setSize(100, layoutHeight);
Combo._x = (layoutWidth-100)/2;
Combo._y = (layoutHeight-16)/2;
}

function setValue(str:String, item:Object, sel:Boolean) : Void
{
Combo._visible = (item!=undefined);
Combo.dataProvider = cards2;
Combo.editable="true";
Combo.getItemAt(1).label;

}

function getPreferredHeight(Void) : Number
{
return 16;
}

function getPreferredWidth(Void) : Number
{
return 100;
}

function click()
{
listOwner.editField(getCellIndex().itemIndex, getDataLabel(), Combo.selectedItem);
}

}
関たかまさ
Åê¹ÆNo.11350
投稿日時: 2004-10-7 19:54
常連
居住地: 埼玉
投稿: 61
使用環境:
WinXP Pro(sp1)
FlashMX 2004 Pro 7.2
Re: フォームアプリ作成ノウハウ
こんばんわ。

引用:
初期表示のデータと選択時に選択項目を表示することができずに躓いております。

どの様なロジックで実現されているのかわかりませんが、

【常に表示しない場合】
CellRendererの為に作成したMovieClipにTextFieldやLabel等を配置、もしくはクラスの中で動的に作成されたTextField等にComboBoxの現在設定されているラベルを表示。
同様に、選択されたらEventでTextを設定。

【常に表示する場合】
特に問題は無いはず・・・

ということで、どちらで実現されているでしょうか?
サンプルのCheckBoxRendererみたいな感じか、入力可能状態のDataGridのTextInputみたいな感じかって事です
flower
Åê¹ÆNo.11349
投稿日時: 2004-10-7 19:46
新米
居住地:
投稿: 5
使用環境:
Re: フォームアプリ作成ノウハウ
はじめまして、flowerと申します。
CellRendererでComboBoxを表示で検索しここにたどり着きました。
CheckCellRendererに修正を加えComboBoxにし、内部で配列をComboBoxのデータにして表示しているのですが、初期表示のデータと選択時に選択項目を表示することができずに躓いております。
何がたりないのかご教授頂けませんでしょうか?
突然の質問で申し訳ありませんが何卒よろしくお願いいたします。

(1) 2 3 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops