Question

Donc, mon objectif est une fois qu'un utilisateur clique sur l'élément de la liste déroulante, la cellule appellera automatiquement EndEdit (). La chose la plus étrange est que le code ci-dessous fonctionnera sur les ComboBoxesCells 2-n que je laisse tomber vers le bas et sélectionnez des valeurs, mais jamais de la première. Y at-il quelque chose que je suis absent ici ??

        protected override void OnCellClick(DataGridViewCellEventArgs e)
        {
            base.OnCellClick(e);

            DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl;
            if (control != null)
            {
                   control.DropDownClosed += new EventHandler(control_DropDownClosed);
            }
        }

            void control_DropDownClosed(object sender, EventArgs e)
            {
                this.EndEdit();
                DataGridViewComboBoxEditingControl control = sender as DataGridViewComboBoxEditingControl;
                control.DropDownClosed -= new EventHandler(control_DropDownClosed);
            }

convient d'ajouter ici que je suis héritant de DataGridView si ce n'est pas évident

Était-ce utile?

La solution

Quand quelque chose comme « La chose la plus étrange est que le code ci-dessous fonctionnera sur les ComboBoxesCells 2-n que je laisse tomber vers le bas et sélectionnez des valeurs de mais jamais le premier » arrive, il est souvent parce que la événement se produit avant que quelque chose dont vous avez besoin est fait.

Seing votre exemple, je dirais que la première fois, lorsque vous cliquez sur,

DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl;

vous donne control == null.

Peut-être que vous devriez changer l'événement choisi de faire vos affaires de Click à SelectedIndexChanged ou SelectedValueChanged?

Hope this helps,

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top