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

NumericUpDownでの値の変更

環境/言語:[WindowsXP Pro XP2, VB.NET2002, .NET Framework1.0]
分類:[.NET]

NumericUpDownコントロールにて,
キーボードによる値の変更を拾うことができず
困っています.
ValueChangedで!と思ったのですが,↓

http://www.microsoft.com/japan/msdn/mobility/prodtechinfo/devtools/netcf/FAQ/#5.24

とのこと.

KeyPressで,やるとValueが変更前になっていますが,変更後の値が知りたいのです.
例)コントロールに「10」と表示されていて,
  新たにキーボードから「0」をタイプして「100」にする場合,
  KeyPressを拾った時点では,Valueが「10」のままです.
  (KeyPressを抜けるとValueが100になる.)

わかる方がいらっしゃいましたら,よろしくお願いします.
2005/03/04(Fri) 14:23:00 編集(投稿者)

こんにちは、じゃんぬねっと です。

■No8957に返信(アングレさんの記事)
> KeyPressで,やるとValueが変更前になっていますが,変更後の値が知りたいのです.
> わかる方がいらっしゃいましたら,よろしくお願いします.

簡単な方法としては、
NumericUpDown コントロールを継承したコントロールで、
OnTextChanged などをオーバーライドする。
(描画について、工夫する必要があります)

難しい方法としては、
NumericUpDown コントロールを継承したコントロールで、
今現在、どこが選択されているかを読み取って、
KeyPress イベントで押された Key を加味した結果で入力チェックする。
(これは、面倒ですね... >_<)

# ところで、入力制限をかけるくらいならば、
# NumericUpDown コントロールを実装すること自体を、検討すべきかと思います。
アングレです.

じゃんぬねっと様,いつもお世話になっております.

> 簡単な方法としては、
> NumericUpDown コントロールを継承したコントロールで、
> OnTextChanged などをオーバーライドする。
> (描画について、工夫する必要があります)
>
> 難しい方法としては、
> NumericUpDown コントロールを継承したコントロールで、
> 今現在、どこが選択されているかを読み取って、
> KeyPress イベントで押された Key を加味した結果で入力チェックする。
> (これは、面倒ですね... >_<)
>
> # ところで、入力制限をかけるくらいならば、
> # NumericUpDown コントロールを実装すること自体を、検討すべきかと思います。

私が未熟なせいか,オーバーライドがうまくいかず・・・

結局,KeyPressイベントを拾って,
変更された値でのチェックではなく,
変更する前の値でチェックするようにしました.

<pre>

Private Sub NumericUpDown_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles NumericUpDown1.KeyPress

If (e.KeyChar >= "0"c Or e.KeyChar <= "9"c) And _
((Double.Parse(NumericUpDown1.Value) >= (NumericUpDown1.Maximum + 1)/10) And _
(NumericUpDown1.Maximum >= Double.Parse(NumericUpDown1.Value))) Then
e.Handled = True
Exit Sub
End If
End Sub

</pre>

ありがとうございました.
こんな感じでどうでしょうか?

Dim col As Control
For Each col In NumericUpDown1.Controls
If TypeOf col Is TextBox Then
AddHandler col.TextChanged, AddressOf NumericUpDown1_TextChanged
End If
Next col

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