Thread Rating:
  • 698 Vote(s) - 2.8 Average
  • 1
  • 2
  • 3
  • 4
  • 5
文字入力の抑止について
09-24-2011, 03:20 PM,
#11
RE: 文字入力の抑止について
>123aや12a3をコピーしてTextFieldにペーストしたら123だけ入るのってさすがに厳しいですかね?
>まぁ、そこまで要求することはないとは思いますが・・[Image: smile.gif]


う~ん、undoを使用する場合だと、その様な仕様は難しいかもしれませんねSad
Yuhkiさんが投稿されている様に、文字を空文字に置き換える様にすれば実現はできると思いますSmile

09-26-2011, 12:55 PM,
#12
RE: 文字入力の抑止について
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, 05:42 PM,
#13
RE: 文字入力の抑止について
(09-24-2011, 03:20 PM)森口 慶紀 Wrote: >う~ん、undoを使用する場合だと、その様な仕様は難しいかもしれませんねSad
>Yuhkiさんが投稿されている様に、文字を空文字に置き換える様にすれば実現はできると思いますSmile


そのような入力の方法は通常しないと思うので、ペースト時に入力不可能な文字が入っていたらペースト自体ができないのが本来の動きでよいのかとも思ってますSmile
09-26-2011, 05:50 PM,
#14
RE: 文字入力の抑止について
(09-26-2011, 12:55 PM)onyo Wrote: クラスを作らずに、同じ定義を部品化したいのであれば
Arguments と splice を使用すればこんな感じでできます。


まさに期待していた部品です。どうもありがとうございますSmile
やはり初回起動時には自動遷移しないのが気になりますSad
09-29-2011, 08:56 AM,
#15
RE: 文字入力の抑止について
いろんな提案があるみたいですが、TextFieldで文字制限する場合の王道はYuhkiさんのreplace-selection-with-stringをオーバーライドする方法でしょうね。コピペやキャレット位置に依存せずにやろうと思うと。

(09-26-2011, 05:42 PM)usami Wrote:
(09-24-2011, 03:20 PM)森口 慶紀 Wrote: >う~ん、undoを使用する場合だと、その様な仕様は難しいかもしれませんねSad
>Yuhkiさんが投稿されている様に、文字を空文字に置き換える様にすれば実現はできると思いますSmile


そのような入力の方法は通常しないと思うので、ペースト時に入力不可能な文字が入っていたらペースト自体ができないのが本来の動きでよいのかとも思ってますSmile


Yuhkiさんの例で数字にマッチしたときに空文字にしてしまっているところを、数字だけ削除するように変えれば一応できます。
09-29-2011, 09:28 AM,
#16
RE: 文字入力の抑止について
(09-26-2011, 05:50 PM)usami Wrote: やはり初回起動時には自動遷移しないのが気になりますSad
AttachEventのところを以下のようにしてみてください。

Code:
{on AttachEvent do
    {after 0s do {tf1.become-active}}
}

ただ私のCurl8.0の環境だとこれをやらなくても初回起動からうまく動きましたよ。でも6.0だと動きませんでした。usamiさんも同じですかね。


09-29-2011, 02:54 PM, (This post was last modified: 09-29-2011, 03:22 PM by usami.)
#17
RE: 文字入力の抑止について
どうもありがとうございます。 きちんと動きました。

>Yuhkiさんの例で数字にマッチしたときに空文字にしてしまっているところを、数字だけ削除するように変えれば一応できます。

Java等他システムで確認しましたが数字だけペーストできるものはなかったので、ペーストできない仕様でよいと思ってます。

>ただ私のCurl8.0の環境だとこれをやらなくても初回起動からうまく動きましたよ。でも6.0だと動きませんでした。usamiさんも同じですかね。

当方の環境は7.0でしたが、8.0の環境で試すと確かに変更なしで動きました。
また、tf1に全桁数字を入れた後、tf1にカーソルを戻して全桁表示状態で
数字以外のキーを押すとカーソルがtf3まで飛んでしまいますが、
tf1の状態にとどまることって可能なのでしょうかSad

Forum Jump:


Users browsing this thread:
6 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('279')