我正在尝试使用只接受数字的自定义DataGridViewTextBoxCell创建自定义DataGridViewColumn。我发现的所有解决方案都涉及向实际特定DataGridView的EditingControlShowing添加事件处理程序。但是,我想创建一个自定义DataGridViewColumn,当添加到任何DataGridView时,会自动限制用户输入。
有什么办法可以做到吗?
Public Class datagridviewNumberColumn
Inherits DataGridViewColumn
Public Sub New()
MyBase.New(New datagridviewNumberCell())
End Sub
Public Overrides Property CellTemplate() As DataGridViewCell
Get
Return MyBase.CellTemplate
End Get
Set(ByVal value As DataGridViewCell)
If (value IsNot Nothing) AndAlso _
Not value.GetType().IsAssignableFrom(GetType(datagridviewNumberCell)) _
Then
Throw New InvalidCastException("Must be a datagridviewNumberCell")
End If
MyBase.CellTemplate = value
End Set
End Property
End Class
Public Class datagridviewNumberCell
Inherits DataGridViewTextBoxCell
Protected Overrides Sub OnKeyPress(e As System.Windows.Forms.KeyPressEventArgs, rowIndex As Integer)
MyBase.OnKeyPress(e, rowIndex)
If Not IsNumeric(e.KeyChar) Then e.Handled = True
End Sub
End Class
我的尝试在上面,但不起作用。永远不会触发OnKeyPress事件。我错过了什么吗?
答案 0 :(得分:0)
听起来你只想将datagridview中的用户输入限制为整数,是吗? 您应该可以使用列的ValueType属性执行此操作:https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.valuetype%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1
例如:
col.ValueType = GetType(Integer)
在创建和填充datagridview时设置它。