在C#中的文本框中粘贴限制

时间:2011-03-11 11:48:03

标签: c# winforms textbox numeric

我已完成textbox.shortcut= false所以我限制复制并粘贴textbox。但我想只粘贴数值(这里我也限制在key_press只会放入数值)但完全粘贴不起作用,我只想粘贴数值。我怎么能这样做?

6 个答案:

答案 0 :(得分:2)

我会在TextChanged事件中处理。
这会抓住粘贴,拖放和所有其他可能的情况。

答案 1 :(得分:1)

如果您正在捕获按键,可以检查Ctrl-V并使用类似

的内容检查剪贴板内容
   IDataObject clipData = Clipboard.GetDataObject();
   string data = (string)clipData.GetData(System.Windows.Forms.DataFormats.Text);

然后您可以检查(this.Text +数据)以查看它是否可以接受。

答案 2 :(得分:1)

如果您根据文本框构建自己的控件,则可以覆盖文本框的WndProc事件:

    #region -- WndProc(ref Message m) Event Handler --
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_PASTE)
        {
            //your code here
        }
    }
    #endregion

答案 3 :(得分:1)

在KeyDown事件中尝试此操作

 Public Sub TextBoxNumeric_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
    Try
        ' Allow navigation keyboard arrows
        If fAllowNavigationArrows(e) Then

            ' Handle pasted Text
            If e.Control AndAlso e.KeyCode = Keys.V Then
                Dim strInput As String = Clipboard.GetText()
                Dim strOutput As String = ""
                Dim intStart As Integer
                Dim strNewTxt As String

                e.SuppressKeyPress = True

                ' Preview paste data (removing non-number characters)
                For intI As Integer = 0 To strInput.Length - 1
                    If Char.IsDigit(strInput(intI)) Or (strInput(intI) = "." And strOutput.Length > 0 And strOutput.IndexOf(".") < 0) Then
                        strOutput += strInput(intI).ToString()
                    End If
                Next

                ' Select TextBox Object
                With DirectCast(sender, TextBox)

                    .SelectAll()
                    intStart = .SelectionStart
                    strNewTxt = .Text
                    strNewTxt = strNewTxt.Remove(.SelectionStart, .SelectionLength)

                    ' Remove selected text
                    strNewTxt = strNewTxt.Insert(.SelectionStart, strOutput)

                    ' Paste
                    .Text = strNewTxt
                    .SelectionStart = intStart + strOutput.Length

                End With

            End If

        End If

    Catch ex As Exception
        Throw ex
    End Try

答案 4 :(得分:0)

也许使用onchange事件,每次更改文本时,尝试解析它,排除每个不是数字的字符?

答案 5 :(得分:0)

如果您使用MaskedTextBox控件并将遮罩设置为#####,那么您可以复制像a123b这样的值并将其粘贴到蒙版编辑控件中,它只会粘贴123.