vb.net Datagridview中的一列不应允许粘贴非整数

时间:2013-05-10 13:04:34

标签: vb.net datagridview

我有一个datagridview,其中一列是Quantity列,只允许整数。没有负号或小数点。我已经阻止用户键入任何字符,但他们可以将它们粘贴进去。我可以在验证中停止此操作,但我希望甚至不显示粘贴的字符。如何检测和删除粘贴的字母和什么事件

理想情况下,我也希望只有粘贴不起作用,所以如果该字段已经有2并且它们粘贴了“test”那么2将保留,尽管这并不重要。

3 个答案:

答案 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