2010-06-29 5 views
1

J'ai un DataGridViewCell personnalisé avec un contrôle utilisateur comme contrôle d'édition. La cellule a été construite dans le style de cet article: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.initializeeditingcontrol.aspxUserControl dans DataGridViewCell personnalisé Ignorer la première frappe

Pour la plupart, cela fonctionne très bien. Le problème est que le comportement normal d'un DataGridViewCell est de passer la frappe utilisée pour entrer EditMode au contrôle, mais cela ne se produit pas pour cette cellule.

Exemple:

Je sélectionne la cellule de date personnalisée et tapez « 12/24/2008 », le « 1 » commence EditMode, et « 24/02/2008 » apparaît dans la cellule.

Comment puis-je obtenir la première frappe sur le contrôle d'édition?

Répondre

1

Je l'ai compris!

Le contrôle personnalisé a un TextBox sur lequel a toujours a le focus (au moins, dans la commande usercontrol). Lorsque l'utilisateur tape, les frappes vont directement au TextBox. Mais lorsque le DataGridViewCell passe la touche à la commande, il va à l'contrôle utilisateur, pas le .

J'ajouté ce code à la usercontrol pour le fixer:

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

Je ne pensais jamais d'utiliser .AppendText, qui fonctionne très bien. J'ai également l'espace de configuration pour effacer le TextBox (TextBox.Text = String.Empty). Merci! – TamusJRoyce

+0

AppendText est également très utile si vous avez une grande zone de texte déroulante affichant des messages d'état. Le réglage du texte défile automatiquement vers le haut. Appeler AppendText défile automatiquement vers le bas. – Mashmagar

0

piège la combinaison de touches sous la forme:

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 
Questions connexes