Ограничение вставки в текстовом поле в C # - PullRequest
2 голосов
/ 11 марта 2011

Я сделал textbox.shortcut= false, поэтому я ограничился копированием и вставкой в ​​textbox.Но я хочу вставить только числовое значение (здесь я также ограничил key_press, что будет вставлено только числовое значение), но полностью вставка не работает, я хочу вставить только числовое значение.Как я могу это сделать?

Ответы [ 6 ]

2 голосов
/ 11 марта 2011

Я бы обработал это в событии TextChanged.
Это бы поймало вставку, перетаскивание и все другие возможные сценарии.

1 голос
/ 18 декабря 2011

Попробуйте это в событии 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
1 голос
/ 11 октября 2011

Если вы строите свой собственный элемент управления на основе текстового поля, вы можете переопределить событие WndProc текстового поля:

    #region -- WndProc(ref Message m) Event Handler --
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_PASTE)
        {
            //your code here
        }
    }
    #endregion
1 голос
/ 11 марта 2011

Если вы ловите нажатие клавиши, вы можете проверить наличие Ctrl-V и проверить содержимое буфера обмена, используя что-то вроде

   IDataObject clipData = Clipboard.GetDataObject();
   string data = (string)clipData.GetData(System.Windows.Forms.DataFormats.Text);

Затем вы можете проверить (this.Text + data), чтобы убедиться, что это приемлемо.

0 голосов
/ 11 марта 2011

Если вы используете элемент управления MaskedTextBox и устанавливаете маску, например, на ##### маску, то вы можете скопировать значение, например a123b, и вставить его в маскируемый элемент управления для редактирования, и он вставит только 123.

0 голосов
/ 11 марта 2011

Может быть, использовать событие onchange, и каждый раз, когда текст изменяется, попробуйте проанализировать его, исключая каждый символ, который не является числом?

...