У меня есть ComboBox в форме, а его высота по умолчанию - 21. Как мне его изменить?
Как установить высоту ComboBox?
Ответ 1
Автоматические размеры ComboBox для соответствия шрифту. Отключение это не вариант. Если вы хотите, чтобы он был больше, то придайте ему более крупный шрифт.
Ответ 2
Установите DrawMode
на OwnerDrawVariable
. Однако настройка ComboBox приводит к другим проблемам. См. Эту ссылку для учебника о том, как это сделать полностью:
http://www.csharphelp.com/2006/09/listbox-control-in-c/
OwnerDrawVariable
пример кода здесь:
https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.drawitem%28v=vs.110%29.aspx
После этого вам нужно установить свойство ItemHeight
в поле со списком, чтобы установить эффективную высоту выпадающего списка.
Ответ 3
Как еще один вариант, если вы хотите увеличить высоту ComboBox
без увеличения размера шрифта или беспокоиться о том, чтобы рисовать все самостоятельно, вы можете использовать простой вызов API Win32, чтобы увеличить высоту, подобную этой
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();
}
}
}
Результат:
Ответ 4
Для этого вам нужно установить DrawMode
в OwnerDrawVariable
или OwnerDrawFixed
и вручную рисовать ваши элементы. Это можно сделать с помощью довольно простого класса.
Этот пример позволит вам использовать свойство ItemHeight
ComboBox независимо от размера шрифта. Я TextAlign
бонусное свойство TextAlign
которое также позволит вам 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.
}
}
Теперь у нас есть полный контроль над нашим шрифтом и высотой ComboBox отдельно. Нам больше не нужно делать большой шрифт для размера нашего ComboBox.
Ответ 5
Если вы хотите настроить количество элементов в ComboBox, вы можете изменить значение DropDownHeight следующим образом, учитывая список элементов. Я использую 24 здесь как "количество штук"; это отнюдь не фиксировано.
comboBox1.DropDownHeight = SomeList.Count * 24;
Ответ 6
ComboBox имеет свойство DropDownHeight, которое можно изменить либо через окно свойств комбинированного списка, либо программно. т.е.
public partial class EventTestForm : Form
{
public EventTestForm()
{
InitializeComponent();
cmbOwners.DropDownHeight = 100;
}
Ответ 7
В коде, a.Height должен работать. В дизайнере зайдите в свойства и посмотрите в Size- > Height.
В качестве альтернативы вы можете изменить размер шрифта, и поле со списком станет больше, чтобы разместить его, но я не думаю, что вы хотите.