0

ここから例を挙げて、ニーズに応じてテキストボックスをサブクラス化しました。

同様に、NumericUpDownコントロールをサブクラス化して、selectAll機能を取得し、ポイント( "。")文字がコンマ( "、")文字に押された場合に置き換えて、自分のロケールにより適したNumericUpDownコントロールに適合させようとします。

ただし、NumericUpDownにはtextboxと同じプロパティがないため、これを行うことはできません。これらのコントロールの両方が同じように動作するようにしたいと思います。

私のコードでは、SelectAllとSelectionLengthの2つの問題が残っています。

Option Explicit On
Option Strict On

Public Class xNumericUpDown
Inherits NumericUpDown

Private alreadyFocused As Boolean

Protected Overrides Sub OnLeave(ByVal e As EventArgs)
    MyBase.OnLeave(e)

    Me.alreadyFocused = False

End Sub

Protected Overrides Sub OnGotFocus(ByVal e As EventArgs)
    MyBase.OnGotFocus(e)

    If MouseButtons = MouseButtons.None Then

        Me.SelectAll() ' HOW TO MAKE SELECTALL SUB FOR NUMERICUPDOWN?
        Me.alreadyFocused = True

    End If
End Sub

Protected Overrides Sub OnMouseUp(ByVal mevent As MouseEventArgs)
    MyBase.OnMouseUp(mevent)

    If Not Me.alreadyFocused AndAlso Me.SelectionLength = 0 Then ' HOW TO CHECK SELECTIONLENGTH FOR NUMERICUPDOWN?

        Me.alreadyFocused = True
        Me.SelectAll() ' HOW TO MAKE SELECTALL SUB FOR NUMERICUPDOWN?

    End If
End Sub

Protected Overrides Sub OnKeyPress(ByVal keyevent As KeyPressEventArgs)
    MyBase.OnKeyPress(keyevent)

    If keyevent.KeyChar = "." Then
        keyevent.KeyChar = CChar(",")
    End If
End Sub

End Class

これを機能させるのを手伝ってください。

4

1 に答える 1

2

長さを確認し、すべてのテキストを選択するには、これを試してください:

If Not Me.alreadyFocused AndAlso Me.Text.Length = 0 Then 'Though I suspect it should be <> 0

   Me.alreadyFocused = True
   Me.Select(0, Me.Text.Length)

End If

そして、charの置換については、これを試してください(テストされていません):

If keyevent.KeyChar = "."c Then
      keyevent.Handled = True
      SendKeys.Send(",")
End If
于 2013-02-03T13:37:26.040 に答える