J’ai une ComboBox sur un formulaire et sa hauteur par défaut est 21. Comment puis-je le changer?
ComboBox taille automatiquement pour s’adapter à la police. Désactiver cela n’est pas une option. Si vous voulez plus gros, donnez-lui une police plus grande.
Définissez DrawMode
sur OwnerDrawVariable
. Cependant, la personnalisation de la ComboBox pose d’autres problèmes. Voir ce lien pour un tutoriel sur la façon de faire cela complètement:
http://www.csharphelp.com/2006/09/listbox-control-in-c/
OwnerDrawVariable
code OwnerDrawVariable
ici: https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.drawitem%28v=vs.110%29.aspx
Une fois que cela est fait, vous devez définir la propriété ItemHeight
de la liste déroulante pour définir la hauteur effective de la liste déroulante.
Autre option: si vous souhaitez augmenter la hauteur de la ComboBox
sans augmenter la taille de la police ni vous soucier de tout dessiner vous-même, vous pouvez utiliser un simple appel d’API Win32 pour augmenter la hauteur de la manière suivante:
using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Win32ComboBoxHeightExample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("user32.dll")] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam); private const Int32 CB_SETITEMHEIGHT = 0x153; private void SetComboBoxHeight(IntPtr comboBoxHandle, Int32 comboBoxDesiredHeight) { SendMessage(comboBoxHandle, CB_SETITEMHEIGHT, -1, comboBoxDesiredHeight); } private void button1_Click(object sender, EventArgs e) { SetComboBoxHeight(comboBox1.Handle, 150); comboBox1.Refresh(); } } }
Résultat:
Si vous souhaitez ajuster le nombre d’éléments de la zone de liste déroulante, vous pouvez modifier la valeur de DropDownHeight comme suit, à l’aide d’une liste d’éléments. J’utilise 24 ici comme “montant par article”; ce n’est en aucun cas fixé.
comboBox1.DropDownHeight = SomeList.Count * 24;
Pour ce faire, vous devez définir DrawMode
sur OwnerDrawVariable
ou OwnerDrawFixed
et dessiner manuellement vos éléments. Cela peut être fait avec une classe assez simple.
Cet exemple vous permettra d’utiliser la propriété ItemHeight
de la ComboBox indépendamment de la taille de la police. J’ai TextAlign
une propriété bonus TextAlign
qui vous permettra également de centrer les éléments.
Une chose à noter est que vous devez définir DropDownStyle
sur DropDownList
pour que l’élément sélectionné respecte nos personnalisations.
// The standard combo box height is determined by the font. This means, if you want a large text box, you must use a large font. // In our class, ItemHeight will now determine the height of the combobox with no respect to the combobox font. // TextAlign can be used to align the text in the ComboBox class UKComboBox : ComboBox { private SsortingngAlignment _textAlign = SsortingngAlignment.Center; [Description("Ssortingng Alignment")] [Category("CustomFonts")] [DefaultValue(typeof(SsortingngAlignment))] public SsortingngAlignment TextAlign { get { return _textAlign; } set { _textAlign = value; } } private int _textYOffset = 0; [Description("When using a non-centered TextAlign, you may want to use TextYOffset to manually center the Item text.")] [Category("CustomFonts")] [DefaultValue(typeof(int))] public int TextYOffset { get { return _textYOffset; } set { _textYOffset = value; } } public UKComboBox() { // Set OwnerDrawVariable to indicate we will manually draw all elements. this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; // DropDownList style required for selected item to respect our DrawItem customizations. this.DropDownStyle = ComboBoxStyle.DropDownList; // Hook into our DrawItem & MeasureItem events this.DrawItem += new DrawItemEventHandler(ComboBox_DrawItem); this.MeasureItem += new MeasureItemEventHandler(ComboBox_MeasureItem); } // Allow Combo Box to center aligned and manually draw our items private void ComboBox_DrawItem(object sender, DrawItemEventArgs e) { // Draw the background e.DrawBackground(); // Draw the items if (e.Index >= 0) { // Set the ssortingng format to our desired format (Center, Near, Far) SsortingngFormat sf = new SsortingngFormat(); sf.LineAlignment = _textAlign; sf.Alignment = _textAlign; // Set the brush the same as our ForeColour Brush brush = new SolidBrush(this.ForeColor); // If this item is selected, draw the highlight if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) brush = SystemBrushes.HighlightText; // Draw our ssortingng including our offset. e.Graphics.DrawSsortingng(this.Items[e.Index].ToSsortingng(), this.Font, brush, new RectangleF(e.Bounds.X, e.Bounds.Y + _textYOffset, e.Bounds.Width, e.Bounds.Height), sf); } } // If you set the Draw property to DrawMode.OwnerDrawVariable, // you must handle the MeasureItem event. This event handler // will set the height and width of each item before it is drawn. private void ComboBox_MeasureItem(object sender,System.Windows.Forms.MeasureItemEventArgs e) { // Custom heights per item index can be done here. } }
Maintenant, nous avons le plein contrôle de notre police et de la hauteur de la ComboBox séparément. Nous n’avons plus besoin de créer une police de grande taille pour notre ComboBox.
Dans le code, a.Height devrait fonctionner. Dans le concepteur, allez dans les propriétés et regardez dans Taille-> Hauteur.
Alternativement, vous pouvez changer la taille de la police et la liste déroulante s’agrandira pour l’adapter, mais je ne pense pas que ce soit ce que vous voulez.