C# - Régler la taille de la zone de liste déroulante

Je veux régler la hauteur d'une ComboBox (à partir de la Windows Forms Contrôles) à X au cours de l'exécution.

J'ai

  • la DrawMode Propriété définie à OwnerDrawVariable, de préciser que la
    les éléments sont dessinés manuellement;
  • la IntegralHeight Propriété est définie sur false, afin d'éviter la Control automatiquement le redimensionnement de lui-même;
  • la ItemHeight Propriété de la ComboBox également mis à X.

J'ai aussi remplacé le DrawItem et MeasureItem événements pour la zone de liste déroulante des articles (voir code ci-dessous)

Cependant, réglage de la Height de la zone de liste déroulante lors de l'exécution ne fonctionne que si le DropDownStyle est fixé à Simple.

- Je faire cela de deux manières, par programme (modification de l' ComboBox's Height ou Size) de la propriété, et à l'aide d'un PropertyGrid de Contrôle que j'ai sur mon App.

Lorsque j'ai mis la hauteur d'un DropDown ou DropDownList ComboBox, j'ai remarqué que Windows automatiquement les changements de sa hauteur à une autre valeur: Y (qui, après un peu de débogage, j'ai remarqué à X + 6 pour une certaine raison).

Ce qui me manque? Pourquoi est-ce arrivé?

Voici le code à partir de l'gestionnaires:

private void DrawItemHandler(object sender, DrawItemEventArgs e)
{
  //Create a new font to write the item
  Font ComboItemFont = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);

  e.DrawBackground();
  e.DrawFocusRectangle();

  //Write the item's value
  e.Graphics.DrawString(((ComboBox) sender).Items[e.Index].ToString(),
                        ComboItemFont,
                        new SolidBrush(Color.Black),
                        e.Bounds);

  //Update the source's font to match the current font
  ((Control) sender).Font = ComboItemFont;
}

private void MeasureItemHandler(object sender, MeasureItemEventArgs e)
{
     //Do nothing
}
Ce est juste la façon dont les winforms zone de liste déroulante est. Envisager 3ème partie les zones de liste déroulante autrement. Le DrawItem et MeasureItem sont pour la liste de la partie de la commande, pas la partie édition.
Pas sûr que je sais ce que tu veux dire. Vous définissez le contrôle de la police au cours de la DrawItemHandler de la méthode qui va certainement changer la hauteur de la zone de liste déroulante, puisque la hauteur est déterminée par le contrôle de la police. Je voudrais commenter cette ligne.
Je viens de le faire. Le même problème se produit. Donc je suppose que la zone de liste déroulante de la Police n'est pas lié à cette question.

OriginalL'auteur PDoria | 2012-06-20