0

WinForm作業しているもののタイプ(全体と浮動)に応じて、このコントロール(NumericUpDown)に条件付きで整数を適用させたいと思います。

を設定するDecimalPlaces = 0と、0が表示され、上下にクリックすると1ずつ増減します。ただし、と入力する0.6と、1と表示されますが、。のままになり0.6ます。その後インクリメントすると、基になるが表示されない値は1.6になります。

私は自分が欲しいものを強制するためのシンプルで慣用的な方法を探しています(うまくいけば、私が欲しいものが明確になっています)。ある種のイベントをインターセプトする必要がある場合は、インターセプトしますが、NumericUpDownクラスがすでに提供しているフラグ/設定に依存したいと思います。

あなたの解決策がサブクラス化を含む場合、NumericUpDown私はそれについて考えなければなりません。リリースのこの段階では、他の場所でバグを引き起こす可能性のあるクリーンな変更よりも、十分に文書化されたハックを好みます。をサブクラス化しないオプションが欲しいのですがNumericUpDown

ご不明な点がございましたら、お気軽にお問い合わせください。

4

2 に答える 2

1

基になる値はdecimal型です。DecimalPlacesは、コントロールに表示される桁数にのみ影響します。必要なことを実現する最も簡単な方法は、NumericUpDown.Valueをintに丸めることです。

于 2010-12-03T22:51:14.813 に答える
0

これが私たちが使用している不完全な解決策です。まず、ユーザーが小数を入力できないようにします(ユーザーが入力する可能性のある他のすべては、コントロール自体によって正常に処理されるようです)。

Private Sub HandleKeyPress(sender As Object, e As Windows.Forms.KeyPressEventArgs) Handles MyNumericUpDown.KeyPress
   If e.KeyChar = "."c Then e.Handled = True
End Sub

次に、ユーザーが数字以外のものを貼り付けないようにします。私が採用したアプローチでは、いくつかの特定のキーの組み合わせ(ctrl-vとshift-insert)がハードコードされていることに注意してください。アップダウンコントロールのコンテキストメニューを使用するなど、ユーザーが貼り付ける可能性のある他の方法は処理しません。

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, 
                                           ByVal keyData As System.Windows.Forms.Keys) As Boolean
  If keyData = (Keys.Shift Or Keys.Insert) OrElse keyData = (Keys.Control Or Keys.V) Then
     Dim data As IDataObject = Clipboard.GetDataObject
     If data Is Nothing Then
        Return MyBase.ProcessCmdKey(msg, keyData)
     Else
        Dim text As String = CStr(data.GetData(DataFormats.StringFormat, True))
        If text = String.Empty Then
           Return MyBase.ProcessCmdKey(msg, keyData)
        Else
           For Each ch As Char In text
              If Not Char.IsNumber(ch) Then
                 Return True
              End If
           Next
           Return MyBase.ProcessCmdKey(msg, keyData)
        End If
     End If
  Else
     Return MyBase.ProcessCmdKey(msg, keyData)
  End If
End Function

これは完璧な解決策ではありませんが、私たちのニーズに対して意図された動作に十分に近いものです。

于 2015-10-12T23:20:02.540 に答える