2010-07-01 84 views

回答

21

ComboBox自动调整大小以适应字体。关闭它不是一个选项。如果你想让它更大,那就给它一个更大的字体。

+0

要将高度调整为项目数,请参阅属性DropDownHeight。 – 2018-01-11 18:32:10

-1

在代码中,a.Height应该可以工作。在设计师中,进入属性并查看尺寸 - >高度。

或者,您可以更改字体大小,组合框会变得更大以适应它,但我不认为这就是您想要的。

+2

我试过了,但它简化版,有:-( – Gaddigesh 2010-07-01 13:14:48

10

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属性设置为设置组合框的有效高度。

+0

任何影响您的链接不再起作用,你可以总结的内容 – 2016-01-22 09:06:00

+1

@AnyaHope:我更新,其中包含一些示例代码的MSDN链接。使用示例代码设置一个项目,按照我所述添加ItemHeight来补充示例,并且您应该很好。 – code4life 2016-01-22 19:42:06

6

正如另一种选择,如果您想在不增加字体大小的情况下增加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

+0

无效。运行Windows 10 64位,它只是使组合框看起来非现代,几乎就像是在自绘模式下一样。 – 2016-08-15 19:04:50

+0

为我工作。Win 10 64位,任何CPU构建。我必须小心计时。无法在我的自定义组合框控件的构造函数中运行它,我使用了第一个时间“DrawItem”被调用来做到这一点。此外,'DrawMode = DrawMode.OwnerDrawVariable' – MikeH 2017-04-10 21:16:51

+0

在Win 10 64位上也适用于我。谢谢 – clamchoda 2017-12-26 19:35:59

0

如果你是想调整到可以改变个组合框的项目数给定一个项目列表,DropDownHeight的e值如下。我在这里使用24作为“每件物品数量”;这绝不是固定的。

comboBox1.DropDownHeight = SomeList.Count * 24;