- - PR -
テキストボックスに数字を入力する際の制御
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-05-11 13:29
お忙しい中詳しい説明をして頂きありがとうございました。
試してみて、後ほど結果を報告させて頂きます。 [/quote] 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のキーワード(キーワードタブの「検索する文字列」に入力): 「正規表現, 代替構成体」 「正規表現, 文字クラス」 「正規表現, 量指定子」 「正規表現, アトミック ゼロ幅アサーション」 [/quote] | ||||||||
|
投稿日時: 2004-05-11 13:38
この方法だと整数を必ず2桁入力しないと駄目って事はないのでしょうか?
教えて頂いているのに何度も質問してしまいすみません。。。
| ||||||||
|
投稿日時: 2004-05-11 13:55
諸農です。
当たるも八卦、当たらぬも八卦。 簡単なコードですので、一度ご自分で試してください。。(^_^;) で、Jittaさんからのコメントにあるとおりです。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2004-05-11 14:00
ありがとうございます(^○^)
今教えて頂いた通りに書いたら見事に出来ました。 本当にありがとうございました。 [/quote] 当たるも八卦、当たらぬも八卦。 簡単なコードですので、一度ご自分で試してください。。 で、Jittaさんからのコメントにあるとおりです。 [/quote] | ||||||||
|
投稿日時: 2004-05-17 13:57
private void TextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{ Regex r = new Regex(@"^[1-9]?[0-9](?:\.[0-9]{0,6})$"); if (r.IsMatch(TextBox.Text)) MessageBox.Show(this, "OKです", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); else MessageBox.Show(this,"入力が不正です", MessageBoxButtons.OKCancel); } ↑という風に書いて数字の制御はうまく出来るようになったのですが、 今度は違う問題が発生しました。テキストボックスに一度カーソルをフォーカスした後、 編集等の入力を行わずCanselボタンを押すと何も入力していないにも関わらず 「OKです」のメッセージが出てしまいます。 編集(書き込み)が行われた際だけメッセージが出るようにしたいのですが・・・ | ||||||||
|
投稿日時: 2004-05-17 14:21
Validatingイベントの説明をよく読んでください。ErrorProviderを配置して、e.Cancelを設定します。 また、「検査をしないボタン」などは、CausesValidationプロパティをfalseにします。 問題は、Form。「×」などで閉じようと思っても閉じられない... | ||||||||
|
投稿日時: 2004-05-17 14:31
FormはClosingイベントで制御しているので大丈夫です。
ErrorProviderとはどのような物ですか? CausesValidationプロパティとは? 詳細教えて頂いてもよろしいでしょうか? 別個に用意してあるキャンセルボタンで制御するという事でしょうか? いつもすみません。 [ メッセージ編集済み 編集者: junko 編集日時 2004-05-17 14:42 ] | ||||||||
|
投稿日時: 2004-05-17 14:42
ErrorProvider クラス
Validatorが失敗すると、小さい「!」マークがでて、そこがエラーだということをわかりやすくします。 Control.CausesValidation プロパティ Validatingイベントの発生有無をコントロールします。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-05-17 14:44 ] |