2016-11-03 26 views
-1

通貨額のみを受け入れるテキストボックス(たとえば123.40)があり、数字、小数点、およびバックスペースキーのみを許可する次のルーチンを作成しました。問題は、ユーザーがテキストボックスに値をコピー&ペースト(Ctrl-Vなど)することができないことです。テキストボックスのCtrl-Vキーイベントをキャプチャする方法

Private Sub unitPriceTxtBox_keypress(ByVal sender As System.Object, ByVal e As KeyPressEventArgs) Handles unitPriceTxtBox.KeyPress 
     If (Not e.KeyChar = ChrW(Keys.Back) And (".-").IndexOf(e.KeyChar) = -1) Or (e.KeyChar = "." And unitPriceTxtBox.Text.ToCharArray().Count(Function(c) c = ".") > 0) Then 

      e.Handled = True 
     End If 
    End Sub 

私はオンラインいくつかの研究をしていたとCtrl Vキーはhttps://social.msdn.microsoft.com/Forums/en-US/5824457e-9112-43ef-83df-7037a36dd365/what-is-the-keychar-for-ctrlc-and-ctrlv-in-c?forum=winformsを参照してくださいコード22を使用していますが、動作するようには思えません。

キーコードの別の参照がここにあります。 https://msdn.microsoft.com/en-us/library/system.windows.forms.keys(v=vs.110).aspx

誰でも洞察力はありますか?

ありがとうございました。

+1

NumericUpDownコントロールを使用します。 –

+0

ありがとうReza。 NumericUpDownを使用すると、デザインがよりクリーンになります。私は、NumericUpDownがテキストボックスよりも優れていることを確信する必要があり、長期的にコードを維持する方が簡単です。 – g5thomas

+0

数値データ入力の場合は、それが良いです。 –

答えて

0

KeyPressイベントを設定し、ブレークポイントにCtrl + C/Vの値をキャプチャしました。コードファイルにこの値をコピーするには、""cと空を見""cとして終わったが、実際に必要な値に対応する内部の奇妙な小さな文字を持っている

If e.KeyChar = ""c Then ' C 
    Clipboard.SetText(vlantxt.Text) 
ElseIf e.KeyChar = ""c Then 'V 
    Dim copiedText = Clipboard.GetText 
    ' Validate attempted paste 
End If 

enter image description here

それは理想的ではないのですが、それは動作します。

3

KeyDownイベントを使用できます。クリップボードのテキストを検証する必要があります。

Private Sub unitPriceTxtBox_KeyDown(sender As Object, e As KeyEventArgs) Handles unitPriceTxtBox.KeyDown 

    If e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.V Then 
     unitPriceTxtBox.Text = Clipboard.GetText() 
    End If 

End Sub 
関連する問題