代码之家  ›  专栏  ›  技术社区  ›  Gaddigesh

如何设置组合框的高度?

  •  22
  • Gaddigesh  · 技术社区  · 14 年前

    6 回复  |  直到 9 年前
        1
  •  33
  •   Hans Passant    14 年前

    组合框自动调整大小以适应字体。关闭它不是一个选择。如果你想把它放大,那就给它大一点的字体。

        2
  •  15
  •   code4life    8 年前

    DrawMode OwnerDrawVariable . 但是,组合框的定制会导致其他问题。有关如何完成此操作的教程,请参见此链接:

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

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

    ItemHeight 属性设置组合框的有效高度。

        3
  •  10
  •   Calcolat    9 年前

    作为另一种选择,如果你想增加 ComboBox 无需增加字体大小或担心自己绘制所有内容,您可以使用简单的Win32 API调用来增加高度,如下所示:

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

    结果:

    enter image description here

        4
  •  3
  •   clamchoda    6 年前

    为此,您需要设置 DrawMode OwnerDrawVariable OwnerDrawFixed 手动绘制项目。这可以通过一个非常简单的类来完成。

    此示例将允许您使用 ItemHeight TextAlign 这也将允许您将项目居中。

    值得一提的是,你必须 DropDownStyle DropDownList

    // 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.
        }
    
    }
    

    现在我们可以分别完全控制组合框的字体和高度。我们不再需要使用大字体来调整组合框的大小。

    enter image description here

        5
  •  0
  •   Gary Huckabone    6 年前

    如果您想调整组合框中的项目数,可以在给定项目列表的情况下按如下所示更改下拉高度的值。我在这里使用24作为“每项金额”;这决不是固定的。

      comboBox1.DropDownHeight = SomeList.Count * 24;
    
        6
  •  0
  •   user3068170    5 年前

    public partial class EventTestForm : Form
    {
        public EventTestForm()
        {
            InitializeComponent();
            cmbOwners.DropDownHeight = 100;
        }
    
        7
  •  -1
  •   duraz0rz    14 年前

    在代码中,a.高度应该起作用。在设计器中,进入属性并查看大小->高度。