dポイントプレゼントキャンペーン実施中!

VB2005テキストボックスへのコピペ制御についての質問です。
フォーム上にテキストボックスを用意し、数値しか入力させず、整数が入力される予定です。
数値のみを入力させることは出来たのですが、コピペを行うと数値でも文字でも貼りつけ出来てしまいます。
これを制限する方法はあるのでしょうか?

A 回答 (2件)

#1さん同様、第一に「NumericUpDown」を推奨いたします。




もっとカスタマイズ性を高めたいのであれば、ユーザコントロールの自作がお勧めです。

サンプルはテキストボックスを継承した、簡単なユーザコントロール作成方法です。
ペーストだけに対応しています。
判定は適当に「数字」というアバウトな条件で行っております。



※1.クラスの作成[TextNumBox.vb]
Public Class TextNumBox
  Inherits TextBox

  Private Const WM_PASTE As Integer = &H302    '張り付け

  Protected Overrides Sub WndProc(ByRef m As Message)
    Select Case m.Msg
      Case WM_PASTE
        Dim l_objData As IDataObject = Clipboard.GetDataObject()
        If l_objData.GetDataPresent(DataFormats.Text) Then
          Dim l_str文字 As String = CType(l_objData.GetData(DataFormats.Text), String)
          If Not 判定_WM_PASTE(l_str文字) Then
            m.Result = IntPtr.Zero
            Exit Sub
          End If
        End If
    End Select

    MyBase.WndProc(m)
  End Sub

  Private Function 判定_WM_PASTE(ByVal p_strValue As String) As Boolean
    '数字構成判定
    Return System.Text.RegularExpressions.Regex.IsMatch(p_strValue, "[\d]")
  End Function
End Class


※2.画面(Form1)にテキストボックスを作成
仮にTextBox1を作成したとします。


※3.[Form1.Designer.vb]の編集
>Friend WithEvents TextBox1 As System.Windows.Forms.TextBox

Friend WithEvents TextBox1 As TextNumBox


>Me.TextBox1 = New System.Windows.Forms.TextBox

Me.TextBox1 = New TextNumBox
    • good
    • 0

全く気乗りしないなぁ。



NumericUpDownを使えばそれが数値であるか検証する必要がないわけだから。
http://msdn.microsoft.com/en-us/library/system.w …

TextBoxでやるなら、「コピーを制御する」とかそういう考え方じゃなくて
Validatingイベントで待ち受けたほうがいいだろう。
http://msdn.microsoft.com/en-us/library/system.w …

最悪でもTextChangedイベントだ。
http://msdn.microsoft.com/en-us/library/system.w …

#NumericUpDownを使うべき、って思っていてこれはそれほど難しくないから、後者用のコードは敢えて書かない
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A