none
Combobox garde le focus RRS feed

  • Question

  • Bonjour,

    J'ai un combo, avec 3 evenements persos (Enter, DropDown, DrawItem). Lorsque je clic à coté, il conserve le focus !??

     comboBoxLibelleRestoria.Enter += new EventHandler(comboBoxLibelleRestoria_Enter);
                comboBoxLibelleRestoria.DrawMode = DrawMode.OwnerDrawFixed;
                comboBoxLibelleRestoria.DrawItem += new DrawItemEventHandler(comboBoxLibelleRestoria_DrawItem);                
                comboBoxLibelleRestoria.DropDown += new EventHandler(comboBoxLibelleRestoria_DropDown);
    void comboBoxLibelleRestoria_Enter(object sender, EventArgs e)
            {
                if (comboBoxLibelleRestoria.Items.Count == 0)
                {
                    var item = Util.ListArticles.Values.FirstOrDefault(art => art.ELEMENT_REPAS == this.labelElement.Text && art.LIBELLE_RESTORIA == comboBoxLibelleRestoria.Text);
                    PopulateComboboxLibelleRestoria(this.labelElement.Text);
                    comboBoxLibelleRestoria.SelectedItem = item;
                }
            }
    void comboBoxLibelleRestoria_DrawItem(object sender, DrawItemEventArgs e)
            {
                Article item = (Article)((ComboBox)sender).Items[e.Index];
                var lib = getArticleLibelleRecherche(item);
     
                e.DrawBackground();
                using (SolidBrush br = new SolidBrush(e.ForeColor))
                {
                    e.Graphics.DrawString(lib, e.Font, br, e.Bounds);
                }
                e.DrawFocusRectangle();
            }

    void comboBoxLibelleRestoria_DropDown(object sender, EventArgs e){ ComboBox senderComboBox = (ComboBox)sender; int width = senderComboBox.DropDownWidth; Graphics g = senderComboBox.CreateGraphics(); Font font = senderComboBox.Font; int vertScrollBarWidth = (senderComboBox.Items.Count > senderComboBox.MaxDropDownItems) ? SystemInformation.VerticalScrollBarWidth : 0;   int newWidth; foreach(Article art in((ComboBox)sender).Items){ newWidth = (int)g.MeasureString(getArticleLibelleRecherche(art), font).Width + vertScrollBarWidth; if(width < newWidth){ width = newWidth; }} senderComboBox.DropDownWidth = width; }


    Quelqu'un aurait une idée ? un contournement ?

    • Modifié Dekey_ mardi 12 juin 2012 12:11
    mardi 12 juin 2012 12:07

Réponses

Toutes les réponses

  • Bonjour,

    On clique sur quoi ? A priori cela me semble normal si on clique sur qq chose qui ne peut pas prendre le focus comme le fond de la fenêtre ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 12 juin 2012 14:10
    Modérateur
  • Bonjour Dekey,

    Tu peux créer un bouton qui ne fait rien et ajouter une méthode à la Form comme ceci:

     private void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                button2.Focus();
            }

    Attention, un control visible = False ne prend pas un focus


    fred on youTube
    PHP MySQL Web Site Creator
    fred

    mercredi 13 juin 2012 09:35
  • Bonjour et merci pour vos réponses

    J'ai effectivement ajouté un bouton de taille 0 sur ma Form et je lui passe le focus.

    Cela marche , sauf sur un pc sous XP (un autre PC sur XP fonctionne).

    Le projet était en Net 4.0. En repassant en 3.5 çà marche sur tous les postes.

    mardi 19 juin 2012 11:39
  • C'était peut-être un niveau de SP différent sur les deux PCs et je comprends que ce comportement puisse varier (sur le plan du principe, que l'on ne puisse plus pouvoir donner le focus à un contrôle qui n'est de fait pas visible alors qu'on pouvait avant ne me surprendrait pas plus que cela).

    Ma préférence personnel aurait été de résoudre le problème d'origine mais je n'ai pas compris le problème causé par ce comportement qui me semble normal (on a forcément un contrôle qui a le focus et cliquer sur le fond de la fenêtre qui n'est pas un contrôle et ne peut pas avoir le focus, laissera le focus sur le contrôle en cours). Je soupçonne que l'on voudrait en fait replier la liste déroulante plutôt que de donner le focus sur un autre contrôle ce que semble faire la liste de base sans pour autant perdre le focus ???


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 19 juin 2012 12:37
    Modérateur
  • Patrice,

    pour préciser, le pb concerne le scroll.

    La form a un scroll vertical, et lorsque le focus restait sur  la combo, l'utilisateur ne pouvait pas utiliser la molette de la sourie  (ça changeait la valeur de la combo).


     

    mardi 19 juin 2012 13:02
  • A vérifier mais dans ce cas je pense que l'on doit pouvoir donner le focus à la scrollbar (ce qui se passerait si l'utilisateur cliquait sur la scrollbar plutôt que le fond de la fenêtre pour réactiver le défilement) et le bouton deviendrait inutile...

    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 19 juin 2012 14:18
    Modérateur