2010-06-29 74 views
1

我有一个用户控件作为其编辑控件的自定义DataGridViewCell。该单元是建立在这篇文章的风格:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.initializeeditingcontrol.aspx自定义DataGridViewCell中的用户控件忽略第一击键

大多数情况下,这很好。问题在于,DataGridViewCell的常规行为是将用于输入EditMode的按键传递给控件,​​但这不是针对此单元格发生的。

实施例:

我选择自定义日期单元,并输入“2008年12月24日”中,“1”开始编辑模式,以及“2008/2/24”出现在细胞中。

如何获得编辑控件的第一次击键?

回答

1

我想通了!

该自定义控件上有一个TextBox总是有焦点(至少,在usercontrol内)。当用户输入时,击键将直接进入TextBox。但是当DataGridViewCell将按键传递给控件时,它将转到用户控件,而不是,TextBox

我将此代码添加到该用户控件来解决它:

Private Sub ucDateTime_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress 
    DateText.AppendText(e.KeyChar) 
    DateText_KeyPress(sender, e) 
End Sub 
+0

我从来没有想过使用.AppendText,它非常漂亮的作品。我也有空间设置来清除文本框(TextBox.Text = String.Empty)。谢谢! – TamusJRoyce 2011-01-31 17:06:19

+0

如果您的大型滚动文本框显示状态消息,AppendText也非常有用。设置文本自动滚动到顶部。自动调用AppendText滚动到底部。 – Mashmagar 2011-02-02 14:07:21

0

陷阱形式的击键:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
    If MyGrid.Focused AndAlso MyGrid.CurrentRow IsNot Nothing Then 
     MyGrid.CurrentCell = MyGrid(4, MyGrid.CurrentRow.Index) 
     MyGrid.BeginEdit(True) 
    End If 
End Sub 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Me.KeyPreview = True 
End Sub