>123aや12a3をコピーしてTextFieldにペーストしたら123だけ入るのってさすがに厳しいですかね?
>まぁ、そこまで要求することはないとは思いますが・・
う~ん、undoを使用する場合だと、その様な仕様は難しいかもしれませんね
Yuhkiさんが投稿されている様に、文字を空文字に置き換える様にすれば実現はできると思います
Quote:また、tf2をmax-charsの変更だけで同じ挙動をさせたいのですがこの場合はNumericTextFieldのような
拡張クラスを作らなければならないのでしょうか?
クラスを作らずに、同じ定義を部品化したいのであれば
Arguments と splice を使用すればこんな感じでできます。
Code:
{import * from CURL.LANGUAGE.REGEXP}
{let max-chars:int = 5}
{let arg:Arguments = {Arguments
{on e:KeyPress do
{tf1.record-typing-for-undo e.value}
},
{on e:ValueChanged at tf:TextField do
{if {regexp-match? |"\D"|, tf.value} then
{tf.undo}
else
{tf.clear-undo-stack}
}
{if {tf.get-text}.size >= tf.max-chars then
let kp:KeyPress = {KeyPress}
set kp.value = KeyPressValue.tab
{tf1.ui-object.enqueue-event
kp
}
{e.consume}
}
},
{on AttachEvent do
{tf1.become-active}
}}}
{let tf1:TextField =
{TextField
width = 40pt,
max-chars = max-chars,
{splice arg}
}
}
{let tf2:TextField =
{TextField
width = 40pt,
max-chars = 5,
{splice arg}
}
}
{let tf3:TextField =
{TextField
width = 40pt,
max-chars = 4,
{splice arg}
}
}
{let tf4:TextField =
{TextField
width = 25pt,
max-chars = 3,
{splice arg}
}
}
{let tf5:TextField =
{TextField
width = 60pt,
max-chars = 10,
{splice arg}
}
}
{HBox tf1,tf2,tf3,tf4,tf5}
(09-26-2011, 12:55 PM)onyo Wrote: [ -> ]クラスを作らずに、同じ定義を部品化したいのであれば
Arguments と splice を使用すればこんな感じでできます。
まさに期待していた部品です。どうもありがとうございます
やはり初回起動時には自動遷移しないのが気になります
いろんな提案があるみたいですが、TextFieldで文字制限する場合の王道はYuhkiさんのreplace-selection-with-stringをオーバーライドする方法でしょうね。コピペやキャレット位置に依存せずにやろうと思うと。
(09-26-2011, 05:42 PM)usami Wrote: [ -> ] (09-24-2011, 03:20 PM)森口 慶紀 Wrote: [ -> ]>う~ん、undoを使用する場合だと、その様な仕様は難しいかもしれませんね
>Yuhkiさんが投稿されている様に、文字を空文字に置き換える様にすれば実現はできると思います
そのような入力の方法は通常しないと思うので、ペースト時に入力不可能な文字が入っていたらペースト自体ができないのが本来の動きでよいのかとも思ってます
Yuhkiさんの例で数字にマッチしたときに空文字にしてしまっているところを、数字だけ削除するように変えれば一応できます。
(09-26-2011, 05:50 PM)usami Wrote: [ -> ]やはり初回起動時には自動遷移しないのが気になります
AttachEventのところを以下のようにしてみてください。
Code:
{on AttachEvent do
{after 0s do {tf1.become-active}}
}
ただ私のCurl8.0の環境だとこれをやらなくても初回起動からうまく動きましたよ。でも6.0だと動きませんでした。usamiさんも同じですかね。
どうもありがとうございます。 きちんと動きました。
>Yuhkiさんの例で数字にマッチしたときに空文字にしてしまっているところを、数字だけ削除するように変えれば一応できます。
Java等他システムで確認しましたが数字だけペーストできるものはなかったので、ペーストできない仕様でよいと思ってます。
>ただ私のCurl8.0の環境だとこれをやらなくても初回起動からうまく動きましたよ。でも6.0だと動きませんでした。usamiさんも同じですかね。
当方の環境は7.0でしたが、8.0の環境で試すと確かに変更なしで動きました。
また、tf1に全桁数字を入れた後、tf1にカーソルを戻して全桁表示状態で
数字以外のキーを押すとカーソルがtf3まで飛んでしまいますが、
tf1の状態にとどまることって可能なのでしょうか