TextField(1)
TextFieldについて。
入力テキストフィールドで入力された数字をそのまま足してしまうと、
数字として認識されず、文字列として認識されてしまいます。
なので、その場合は一度、数字に変換してやってから、
足すなどの計算をしてやる必要があります。
例)
1.数字に変換をしなかった場合。
2.数字への変換を行った場合。
ソース
1.数字に変換をしなかった場合
a_txt.maxChars = 1;
b_txt.maxChars = 2;
a_txt.restrict = "1-9";
b_txt.restrict = "0-9";
function calculation(){
a = a_txt.text;
b = b_txt.text;
var sum:Number = a+b;
sum_txt.text = sum;
}
sum_btn.onPress = function(){
calculation();
}
2.数字への変換を行った場合
a_txt.maxChars = 1;
b_txt.maxChars = 2;
a_txt.restrict = "1-9";
b_txt.restrict = "0-9";
function calculation(){
var a:Number = Number(a_txt.text);
var b:Number = Number(b_txt.text);
var sum:Number = a+b;
sum_txt.text = sum;
}
sum_btn.onPress = function(){
calculation();
}
変更している箇所は太字の部分のみ、です。
ようするに、数字であれば、
Number(~)
で、数字に変換できる、というわけです。
教えて!goo - アクションスクリプトで、足し算、引き算をするには?
ちなみに、この例では、数字のみを、入力、
更に、左の入力ボックスでは1桁、右では2桁、のみの入力しかできないようにしています。
この箇所です。
a_txt.maxChars = 1;
b_txt.maxChars = 2;
a_txt.restrict = "1-9";
b_txt.restrict = "0-9";
maxCharsで、入力文字数を制限、
(文字数なので、半角でも全角でも1文字、と判定する、、と思います。※未実証)
restrictで、入力文字を制限しています。
flair4 blog - Flashのテキストフィールドで文字入力を制限する
※ただし、背景色を透明にしてしまうと、WinのIEでは日本語入力が効かなくなるそうです。
fl0260 - wmode を transparent に設定した際の注意点
Flash-JP.COM - テキスト入力textfieldにIE6で日本語入力は×ですか?
これらの応用、とまではいきませんが、とある案件で、
とある日付までの日数のカウントダウン、
を作ったので、それをちょっと改造して、
入力された日付までの日数を表示するものを作ってみました。
(今年(2008年)は閏年なので、今年限定です、、。
さらに、今の日付よりも前の日付を入力すると、0日、と表示されるようにしました。)
ソースを書いておきます。
//現在の日にちを取得
var dateObj:Object = new Date;
var mm:Number = dateObj.getMonth() + 1;
var dd:Number = dateObj.getDate();
//日にちのセット
var m:Array = [31,29,31,30,31,30,31,31,30,31,30,31];
//トータル日にち用
var totalDay:Number = 0;
function calculation(){
//入力された日にちを数字に変換
var month:Number = Number(month_txt.text);
var day:Number = Number(day_txt.text);
//12月分ループ
for ( i = 0 ; i < 12 ; i++){
if ( month < mm){ //入力月が前月
totalDay = 0;
} else if ( month == mm){ //入力月が今月
if ( day <= dd){ //入力日が前日もしくは当日
totalDay = 0;
} else { //入力日までの日数を入れる
totalDay = day-dd;
}
} else{
if ( (i+1) < mm){ //i+1の値が今月より前の月
} else if( (i+1) == mm){//i+1の値が今月
totalDay += ( m[i] - dd);
} else{//i+1の値が今月以降
if ( (i+1) < month){
totalDay += m[i];
} else if ( (i+1) == month){
totalDay += day;
} else{
}
}
}
}
total_txt.text = totalDay;
}
sum_btn.onPress = function(){
totalDay = 0;
calculation();
}
もっと簡単に作れるかと思いきや、作ってみると思ったより長くなりました、、。
forループで、1~12月までまわして、それぞれの条件に合った日数を、
totalDayに足していっているのですが、
その条件分岐がちょっとややこしくなってます。
解説してみます。
(入力された月→month
入力された日→day
現在の月→mm
現在の日→dd
ループ中のi+1→I
と、します。)
1.monthがmm以前
2.monthがmmと同一
3.monthがmm以降
3の時のみ、Iを使った判定を行う。以下は、3の中の処理。
4.Iがmm以前
5.Iがmmと同一
6.Iがmm以降
6の中で、さらに以下を判定
7.Iがmonth以前
8.Iがmonthと同一
9.Iがmonth以降
と、なります。(書いてて自分でも混乱しそう、、)
それぞれの時にtotalDayに何を足していくかと言うと、、
1.0日とします。
2.日付の処理を行う。
3.-
4.何もしない
5.monthからmmを引いた値(今月の残り日数)を足す
6.-
7.それぞれの月の日数を足す
8.ddを足す
9.何もしない
2の日付の処理とは、月でやった、1~3の処理と同じ事を、
日付で行います。
これによって、入力された日付までの日数が表示される、はず、です。
(バグがあっても保障は致しません、、)
ちなみに、これに、年、を付加しようとなると、万年カレンダーの考え方が必要になります。
ですが、これは結構やっかいそうなので、
(昔からあるプログラムの練習問題みたいな感じのようですが、、)
参考リンクだけ、、。
参考:
Programのプ - 万年カレンダー解説
The page 31. - 論文:万年カレンダーを作る(上)
たぶん、日数計算だけなら、ユリウス通日、とか言うものの考え方を使えば簡単そう、、。
また万年カレンダーを作ったらここに解説します。
Labels: ActionScript, Text
<< Home