我有一个datagridview,其中一列是Quantity列,只允许整数。没有负号或小数点。我已经阻止用户键入任何字符,但他们可以将它们粘贴进去。我可以在验证中停止此操作,但我希望甚至不显示粘贴的字符。如何检测和删除粘贴的字母和什么事件
理想情况下,我也希望只有粘贴不起作用,所以如果该字段已经有2并且它们粘贴了“test”那么2将保留,尽管这并不重要。
答案 0 :(得分:1)
你必须实现一个验证方法并在DataGridView's events中调用它(我正在考虑KeyDown / Keypress和MouseClick)。
我认为这是不好的做法,因为你很难找到更多用户可以欺骗你的应用程序的方法;现在大多数应用程序都允许用户输入他们想要的任何内容,但让用户无法完成任务,直到她清理了她的输入。大多数人还会提供有关如何操作的明确说明。
答案 1 :(得分:1)
这是一种方法:
'Set a flag to show when the form has finished initialising
Dim initialising As Boolean = True
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Form is initialised so set boolean to false
initialising = False
End Sub
Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
'Only process once the form is initialised as values don't exist yet!
If Not initialising Then
If Not IsNothing(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) Then
'If the clipboard contains text
If Clipboard.ContainsText Then
' Check to see if the value of the cell matches whats in the clipboard
If CStr(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) = Clipboard.GetText Then
'You know its been pasted
If Not IsNumeric(CStr(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value)) Then
'This value should be rejected
Else
'This value is allowed
End If
End If
End If
End If
End If
End Sub
请参阅我的评论代码以获得解释。
我不确定你是否会想要在这个事件上这样做,因为它不会在用户离开单元格之前触发事件。希望我的方法是根据剪贴板中的内容检查值,这可能有助于您确定它是否为粘贴值。
答案 2 :(得分:0)
像这样的东西
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
End Sub