DOBON.NET DOBON.NETプログラミング掲示板過去ログ

テキストボックスによる電話番号入力制御について

環境/言語:[VB.NET WindowsXP .NET Framework1.1]
分類:[.NET]

インプットマンのテキストボックスを電話番号ユーザコントロールとして作成しました。
1文字入力される毎に”「^1234567890()-」以外なら入力不可”と制御したいです。
現在のロジックは以下の通りです。
Private Sub txtTelNumber_TextChanging(ByVal sender As System.Object, ByVal e As GrapeCity.Win.Input.TextChangingEventArgs) Handles txtTelephoneNumber.TextChanging
Me.txtTelephoneNumber.Text = Regex.Replace(e.Result, "[^1234567890()-]", "")
End Sub
制御自体はうまくいっているみたいなのですが、画面には入力不可項目が表示されてしまいます。
皆様、お忙しい所申し訳ありませんが教えて下さい。宜しくお願い致します。
> 制御自体はうまくいっているみたいなのですが、画面には入力不可項目が表示されてしまいます。
> 皆様、お忙しい所申し訳ありませんが教えて下さい。宜しくお願い致します。

KeyDownイベント(ってあります?)で
Me.txtTelephoneNumber.Text = Regex.Replace(e.Result, "[^1234567890()-]", "")
のコードを書けばいいんじゃないかと。。。

思います。はい。
HogeHogeさん、アドバイス有難うございます。
Keydownイベントあるにはあったのですが、インプットマンにはKeydownイベントが見つからなかったのでデフォルトで書かれた「ByVal e As System.Windows.Forms.KeyEventArgs」を使うと、
「e.Result」はメンバでないと言われ「Me.txtTelephoneNumber.Text」で代用してみました。
実行してみると「$」などを入力すると画面に「$」は表示されますが、カーソルなどを動かすと消えます。「$」を2回入力するとカーソルは先頭に移ってしまいます。
カーソル位置はそのままで、入力不可文字も表示させない様にする事は可能でしょうか?以下は現在のロジックです。
Private Sub txtTelephoneNumber_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtTelephoneNumber.KeyDown
Me.txtTelephoneNumber.Text = Regex.Replace(Me.txtTelephoneNumber.Text, "[^1234567890()-]", "")
End Sub
2005/06/01(Wed) 14:00:27 編集(投稿者)

 InputMan for .NET は扱ったことがないので、ただの勘なのですが‥‥
> Me.txtTelephoneNumber.Text = Regex.Replace(e.Result, "[^1234567890()-]", "")
もしかしたらこれ、変換結果を e.Result に代入するようにしたら解決するのではないでしょうか?
# Changing なイベントでの Result が読み取り専用だとは思えないので。いや、全然的外れかもですけど(^_^;)
#(追記)そして案の定的外れ。残念(>_<)

 と、それはそれとして。

 AxtiveX 版の imText コントロールには Format プロパティという入力制限を規定するものがあったようです。 .NET 版の Edit コントロールにも同様のものがあるのではないでしょうか?
# ActiveX 版と全く同じ機能だとしたら "()-" に限定した制御はできないようですけれど。

 ただ、電話番号の入力なら Mask コントロールを使ったほうが良いような気もします。



# "*" や "#" は‥‥やっぱり普通には必要ないか、と埒もないことを考えてみたり。
深山さん、アドバイス有難うございました。
># Changing なイベントでの Result が読み取り専用だとは思えないので。
残念ながら読み取り専用でした。
色々試していた結果、以下のロジックで解決しました。
Private Sub txtTelNumber_TextChanging(ByVal sender As System.Object, ByVal e As GrapeCity.Win.Input.TextChangingEventArgs) Handles txtTelephoneNumber.TextChanging
If Regex.Replace(e.Result, REGULAR_EXPRESSION_NOTALLOWED_CHAR_SETS, "") = e.Result Then
Else
e.Cancel = True
End If
End Sub
とりあえず、自分の思った通りの動きをしたので良しとする事にしました。
アドバイスを下さった方々、有難うございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板