figure Can not pourquoi il n'est pas, voici l'exemple de code:événement KeyUp ne tirait pas sur DataGrid
public Form1()
{
InitializeComponent();
//Create DataGrid
DataGrid dg = new DataGrid();
dg.Parent = this;
dg.Location = new Point(10, 10);
dg.Size = new System.Drawing.Size(300, 200);
//Create list of people
List<Person> people = MethodThatFetchesPeople();
//Bind list
BindingList<Person> bl_people = new BindingList<Person>(people);
dg.DataSource = bl_people;
//Format grid
dg.TableStyles.Clear();
DataGridTableStyle dgts = new DataGridTableStyle();
dgts.MappingName = bl_people.GetType().Name;
dgts.ReadOnly = true;
DataGridTextBoxColumn col_name = new DataGridTextBoxColumn();
col_name.MappingName = "Name";
col_name.HeaderText = "Name";
dgts.GridColumnStyles.Add(col_name);
DataGridTextBoxColumn col_height = new DataGridTextBoxColumn();
col_height.MappingName = "Height";
col_height.HeaderText = "Height (cm)";
dgts.GridColumnStyles.Add(col_height);
dg.TableStyles.Add(dgts);
//Subscribe events
col_name.TextBox.KeyDown += new KeyEventHandler(TextBox_KeyDown);
col_name.TextBox.KeyUp += new KeyEventHandler(TextBox_KeyUp);
}
Les méthodes de gestion des événements:
void TextBox_KeyUp(object sender, KeyEventArgs e)
{
//Do something on keyup
Debug.WriteLine("Keyup!");
}
void TextBox_KeyDown(object sender, KeyEventArgs e)
{
//Do something on keydown
Debug.WriteLine("Keydown!");
}
}
Après avoir appuyé sur une valeur de la Nom colonne, que DataGridTextBoxColumn obtient le focus. Puis chaque fois que j'appuie sur une touche du KeyDown événement est congédié, mais rien ne se passe pour l'événement KeyUp, même lorsque l'événement KeyDown n'est pas souscrit.
J'ai vraiment juste besoin de l'événement KeyUp, le KeyDown ne correspond pas à mon objectif. Et je ne peux pas passer à l'DataGridView que ce code sera utilisé avec le cadre compact :(
Comment puis-je résoudre ce problème?
Ce problème se produit également sur le plein.Net Framework, je l'ai juste collé sur un nouveau projet et essayé avec une classe Person générique: 'public class Personne { public string Nom {get; ensemble; } public int Hauteur {get; ensemble; } public int Enfants {get; ensemble; } } ' –
Je suppose que vous devrez sous-classer DataGridTextBoxColumn afin que vous puissiez fournir votre propre classe Textbox sous-classée en tant que contrôle d'hôte afin que vous puissiez vous connecter à OnKeyDown. – tcarvin
Jetez un oeil à cette bibliothèque de l'interface utilisateur https://b2kui.codeplex.com/, elle implémente un datagird éditable pour CF et a quelques classes qui servent de solution de contournement pour des problèmes similaires avec la gestion des événements de presse de touche. Divulgation complète: je maintiens ce projet – bit2know