• 締切済み

VB2005テキストボックスへのコピペ制御についての質問です。

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

みんなの回答

回答No.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 へ

すると、全ての回答が全文表示されます。
回答No.1

全く気乗りしないなぁ。 NumericUpDownを使えばそれが数値であるか検証する必要がないわけだから。 http://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.aspx TextBoxでやるなら、「コピーを制御する」とかそういう考え方じゃなくて Validatingイベントで待ち受けたほうがいいだろう。 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating%28v=VS.100%29.aspx 最悪でもTextChangedイベントだ。 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged%28v=VS.100%29.aspx #NumericUpDownを使うべき、って思っていてこれはそれほど難しくないから、後者用のコードは敢えて書かない

すると、全ての回答が全文表示されます。

関連するQ&A