2010年2月1日月曜日

「前へ」と「次へ」のボタン制御

 以前、最初の画像の時には、前へのボタンが無効、前と次の画像に移動できる時は、2つのボタンが有効。最後の画像の時には、次のボタンが無効になるというボタン制御をFLASHでお願いした。


(前へと次へのボタンは、こんな画像)



FLASHプログラマ氏は、「前へ」と「次へ」のボタン制御をActionScriptでこう書いていた。

//ボタンの表示
if (current_page == 0)
{
buttons.btn_prev._visible = false;
buttons.btn_prev_disabled._visible = true;
}
else if (current_page == total - 1)
{
buttons.btn_next._visible = false;
buttons.btn_next_disabled._visible = true;
}
else
{
buttons.btn_prev._visible = true;
buttons.btn_next._visible = true;
buttons.btn_prev_disabled._visible = false;
buttons.btn_next_disabled._visible = false;
}

if文を読み解くと、
1つめのif文には、current_pageが0の時は、一番最初の状態なんだから、「前へ」のボタンは使えないね。
2つめのif文には、最後の状態なんだから、「次へ」のボタンは使えないね。
最後のif文は、それ以外の状態は、「前へ」と「次へ」のボタンは使えるよという意味である。
FLASHのボタンは全部グラフック・シンボルなので、
EnableとDisableのそれぞれのボタンのvisibleプロパティをbool値で制御している。

このプログラム、一見動作しそうなんだけど、動かない。
もし画像が1枚もなかった場合はどうだろう。
current_pageは0、totalは、0なので1つめのif文に行く。ただ、「次へ」のボタンの状態は変更しないので、
もし、「次へ」ボタンが有効になってしまっていたら、そのままの状態を維持することになってしまう。

さらに、もし画像が1枚しかなかった場合は?
current_pageは0の場合には、今度は「前へ」のボタンの状態を更新しない。

それにcurrent_pageにもし、-1が入った場合は?
current_pageにtotalより大きい数字が入った場合は?
その場合には、ボタンは有効になってしまいボタンを押したら、
画像ファイルの配列のサイズの範囲外となりエラーになるだろう(多分)。

こんな短いプログラムでも、条件がもれまくりである。
この場合には、current_pageの前後がどうなのかを考えて、ボタン事にif文を作成しなくてはならない。

// 初期条件。初期状態ではボタンは使えない状態
buttons.btn_prev._visible = false;
buttons.btn_next._visible = false;
buttons.btn_prev_disabled._visible = true;
buttons.btn_next_disabled._visible = true;

// 前のページが0より大きければ、「前へ」のボタンが使用可になる
if( (current_page-1) >= 0 )
{
buttons.btn_prev._visible = true;
buttons.btn_prev_disabled._visible = false;
}

// 次のページが画像の最大数より小さければ「次へ」のボタンが使用可になる
if( (current_page+1) < total )
{
buttons.btn_next._visible = true;
buttons.btn_next_disabled._visible = false;
}

という風に書くのが正しいだろう。

0 件のコメント:

コメントを投稿