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