- PR -

テキストボックスに数字を入力する際の制御

投稿者投稿内容
junko
常連さん
会議室デビュー日: 2004/03/10
投稿数: 23
投稿日時: 2004-05-10 17:10
デバッグをした際、テキストボックスへ表示する数字を整数は2桁まで、小数点以下は6桁までと制御したいのですが、プロパティのMaxLengthとは違うと思われますが、方法がわかりません。
ご助力願います。

使用している言語はC#です。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-05-10 18:13
テストしていないので、うまくいくかどうかはわかりませんが、
Validatingイベントのハンドラ内で、整数の文字数、小数点下の文字数を調べ、オーバーしていたら、キャンセルするというのはいかがでしょうか。

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-05-10 18:34
もっと良い方法があるかもしれませんが参考までに。

文字列の長さでの制限のサンプルがこちらに書いてあります。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10370&forum=7
これの条件を変えるだけでいけると思います。
テキストが変更された場合に、条件を満たす文字列になるまでカーソルの前の文字を1文字ずつ消していけば良いと思います。

junko
常連さん
会議室デビュー日: 2004/03/10
投稿数: 23
投稿日時: 2004-05-10 19:16
返信ありがとうございます。
試させて頂きます。

引用:

一郎さんの書き込み (2004-05-10 18:34) より:
もっと良い方法があるかもしれませんが参考までに。

文字列の長さでの制限のサンプルがこちらに書いてあります。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10370&forum=7
これの条件を変えるだけでいけると思います。
テキストが変更された場合に、条件を満たす文字列になるまでカーソルの前の文字を1文字ずつ消していけば良いと思います。



Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-10 20:49
諸農です。

引用:

junkoさんの書き込み (2004-05-10 17:10) より:
デバッグをした際、テキストボックスへ表示する数字を整数は2桁まで、小数点以下は6桁までと制御したいのですが、プロパティのMaxLengthとは違うと思われますが、方法がわかりません。



Regexクラスを使った方法を考えました。
コード:
     Regex r = new Regex(@"^\d{1,2}\.\d{1,6}$|^\d{1,2}$"); 
     if (r.IsMatch("判定文字列")) textBox1.Text = "判定文字列";
     else textBox1.Text = "0.0";



正規表現そのものの詳細についてはドキュメントやサイトなどを参考にしてください。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
junko
常連さん
会議室デビュー日: 2004/03/10
投稿数: 23
投稿日時: 2004-05-11 10:51
初心者なので分からない部分があってすみませんが・・・
整数2桁はどこで制御すればよろしいのでしょうか?

引用:

junkoさんの書き込み (2004-05-10 17:10) より:
デバッグをした際、テキストボックスへ表示する数字を整数は2桁まで、小数点以下は6桁までと制御したいのですが、プロパティのMaxLengthとは違うと思われますが、方法がわかりません。



Regexクラスを使った方法を考えました。
コード:
     Regex r = new Regex(@"^d{1,2}.d{1,6}$|^d{1,2}$"); 
     if (r.IsMatch("判定文字列")) textBox1.Text = "判定文字列";
     else textBox1.Text = "0.0";



正規表現そのものの詳細についてはドキュメントやサイトなどを参考にしてください。



[/quote]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-11 11:44
諸農です。

テキストボックスに入力された情報をチェックする、
という前提でいいですか?
であれば、

コード:
     string mes = "";
     Regex r = new Regex(@"^d{1,2}.d{1,6}$|^d{1,2}$"); 
     if (r.IsMatch(textBox1.Text)) mes = "OKです";
     else mes = "入力が不適切です";
     MessageBox.Show(mes);



このような感じでチェックが可能でしょう。
チェックをValidatingイベントで行うのであれば、
MessageBoxの代わりにErrorProviderクラスで通知してもいいと思います。

--補足--
正規表現は、私もまだ始めたばかりでパフォーマンスの良いが
書けないのですが(^_^;)

"^d{1,2}.d{1,6}$|^d{1,2}$"

この正規表現の「|」の前半部分で「00.0」〜「00.000000」までを
判定しており、後半部分では「00」を判定しています。
「|」はORの意味です。
「^」と「$」は行頭、行末を意味しています。
「{,}」は最小値と最大値をあらわしています。
「d」は数値を意味しており、これは[0-9]で置き換えることが可能です。

ではでは(^^)/
_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-11 12:03
引用:

junkoさんの書き込み (2004-05-11 10:51) より:
初心者なので分からない部分があってすみませんが・・・
整数2桁はどこで制御すればよろしいのでしょうか?



new Regex(@"^d{1,2}.d{1,6}$|^d{1,2}$"); のうち、
^ … 「文字列の最初」を表す
$ … 「文字列の最後」を表す
つまり、"^なんたらかんたら$"とすると、「なんたらかんたら」という入力文字列そのものに一致する。ついていないと、「なんたらかんたら」を含む文字列に一致する。
| … 検索対象のor演算、つまり、この記号の左か右に一致するもの
d … 十進表記の数値
{1,2} … 1つまたは2つ
つまり、"d{1,2}"で、「十進数1桁または2桁」、
"d{1,2}.d{1,6}"で、「十進数1桁または2桁、続いて小数点、続いて十進数1桁から6桁」となり、「十進数で2桁の整数部と6桁までの小数部」を表す。
"d{1,2}.d{1,6}|d{1,2}"で、「十進数で1〜2桁の整数部と1〜6桁までの小数部、または、十進数で1〜2桁の整数」を含んでいる文字列が対象となる。これに^と$を付けて"^d{1,2}.d{1,6}$|^d{1,2}$"とすることで、「十進数で1〜2桁の整数部と1〜6桁までの小数部、または、十進数で1〜2桁の整数」である文字列が対象となる。

 「(スペース)1」ははじかれるし、「00.00」は通るので、こういう例外的な要素は別に定義する必要があります。
 たとえば、trimした文字列を検査対象とすることで「(スペース)1」などを通すことができます。いったんこの正規表現にマッチすると「floatに変換可能」であることが保証されるので、floatに変換後、ToStringを通すことで「00.00」などの冗長なゼロ表現を検査することができます。

 符号がつくかもしれない場合は、"^[-+]?d{1,2}.d{1,6}$|^[-+]?d{1,2}$"


参照するMSDNのキーワード(キーワードタブの「検索する文字列」に入力):
「正規表現, 代替構成体」
「正規表現, 文字クラス」
「正規表現, 量指定子」
「正規表現, アトミック ゼロ幅アサーション」

スキルアップ/キャリアアップ(JOB@IT)