it-swarm.com.de

Wie stelle ich die Höhe einer ComboBox ein?

Ich habe eine ComboBox in einem Formular und die Standardhöhe ist 21. Wie ändere ich sie?

22
Gaddigesh

ComboBox-Größen werden automatisch an die Schriftart angepasst. Das Ausschalten ist keine Option. Wenn Sie es größer wünschen, geben Sie ihm eine größere Schrift.

24
Hans Passant

Setzen Sie DrawMode auf OwnerDrawVariable. Die Anpassung der ComboBox führt jedoch zu anderen Problemen. Sehen Sie sich diesen Link an, um ein Tutorial zu erhalten, wie Sie dies vollständig tun können:

http://www.csharphelp.com/2006/09/listbox-control-in-c/

OwnerDrawVariable-Beispielcode hier: https://msdn.Microsoft.com/en-us/library/system.windows.forms.combobox.drawitem%28v=vs.110%29.aspx

Sobald dies erledigt ist, müssen Sie die ItemHeight-Eigenschaft der Combobox festlegen, um die effektive Höhe der Combobox festzulegen. 

12
code4life

Eine weitere Option: Wenn Sie die Höhe von ComboBox erhöhen möchten, ohne die Schriftgröße zu erhöhen oder sich um das Zeichnen des gesamten Zeichens sorgen zu müssen, können Sie einen einfachen Win32-API-Aufruf verwenden, um die Höhe wie folgt zu erhöhen:

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();
        }
    }
}

Ergebnis:

 enter image description here

6
Calcolat

Dazu müssen Sie die Variable DrawMode auf OwnerDrawVariable oder OwnerDrawFixed setzen und Ihre Elemente manuell zeichnen. Dies kann mit einer ziemlich einfachen Klasse durchgeführt werden.

In diesem Beispiel können Sie die ItemHeight-Eigenschaft der ComboBox unabhängig von der Schriftgröße verwenden. Ich habe eine Bonus-Eigenschaft TextAlign eingeworfen, mit der Sie die Artikel auch zentrieren können.

Erwähnenswert ist, dass Sie DropDownStyle für das ausgewählte Element auf DropDownList setzen müssen, um unsere Anpassungen zu berücksichtigen.

// 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 StringAlignment _textAlign = StringAlignment.Center;
    [Description("String Alignment")]
    [Category("CustomFonts")]
    [DefaultValue(typeof(StringAlignment))]
    public StringAlignment 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 string format to our desired format (Center, Near, Far)
            StringFormat sf = new StringFormat();
            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 string including our offset.
            e.Graphics.DrawString(this.Items[e.Index].ToString(), 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.
    }

}

Jetzt haben wir die vollständige Kontrolle über die Schriftart und Höhe der ComboBox separat. Wir müssen nicht länger eine große Schrift erstellen, um die Größe unserer ComboBox zu ändern.

 enter image description here

1
clamchoda

Wenn Sie sich an die Anzahl der Elemente in der ComboBox anpassen möchten, können Sie den Wert von DropDownHeight wie folgt ändern, wenn Sie eine Liste der Elemente angeben. Ich verwende hier 24 als "pro Artikelbetrag"; Dies ist keineswegs fixiert.

  comboBox1.DropDownHeight = SomeList.Count * 24;
0
Gary Huckabone

ComboBox hat eine Eigenschaft 'DropDownHeight', die entweder über das Eigenschaftenfenster der ComboBox oder programmgesteuert geändert werden kann. d.h.

public partial class EventTestForm : Form
{
    public EventTestForm()
    {
        InitializeComponent();
        cmbOwners.DropDownHeight = 100;
    }
0
user3068170