C# 在winform应用程序中更改组合框的高度

C# 在winform应用程序中更改组合框的高度,c#,winforms,combobox,size,C#,Winforms,Combobox,Size,我正在开发一种触摸屏设备的应用程序。为了方便用户,我需要更改组合框的大小 我已经检查了很多东西,包括DrawItemEventHandler和MeasureItemEventHandler,但它没有按照我想要的那样工作 基本上,我想改变组合框的高度,而不触及字体大小。当我更改combobox的字体大小时,它看起来像图像的左侧。 我如何设置我的组合框,它看起来像图片的右侧 顺便说一下,我不知道这是否是有效的解决方案,我没有使用数组字符串。我正在像这样绑定数据 combobox.DisplayM

我正在开发一种触摸屏设备的应用程序。为了方便用户,我需要更改组合框的大小

我已经检查了很多东西,包括
DrawItemEventHandler
MeasureItemEventHandler
,但它没有按照我想要的那样工作

基本上,我想改变组合框的高度,而不触及字体大小。当我更改combobox的字体大小时,它看起来像图像的左侧。 我如何设置我的组合框,它看起来像图片的右侧

顺便说一下,我不知道这是否是有效的解决方案,我没有使用数组字符串。我正在像这样绑定数据

 combobox.DisplayMember = "Name";
 combobox.ValueMember = "ID";
 combobox.DataSource = new BindingSource { DataSource = datalist };
提前谢谢

使用TaW解决方案,我成功地设置了我想要的项目。当组合框项目没有下拉时,我唯一不能将文本设置在中间的地方。如何将此文本位置设置为中心


您可以设置
ItemHeight
属性,然后在
DrawItem
事件中自己绘制项目

不太难,搜索“ownerdraw”和“combobox”。这方面有一个例子

以下是从上述链接中提取的最低版本:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index < 0) return;
    Font f = comboBox1.Font;
    int yOffset = 10;

    if ((e.State & DrawItemState.Focus) == 0)
    {
        e.Graphics.FillRectangle(Brushes.White, e.Bounds);
        e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), f, Brushes.Black, 
                              new Point(e.Bounds.X, e.Bounds.Y + yOffset));
    }
    else
    {
        e.Graphics.FillRectangle(Brushes.Blue, e.Bounds);
        e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), f, Brushes.White, 
                              new Point(e.Bounds.X, e.Bounds.Y + yOffset));
    }
private void comboBox1\u DrawItem(对象发送方,DrawItemEventArgs e)
{
如果(e.指数<0)返回;
Font f=comboBox1.Font;
int-yOffset=10;
if((e.State&DrawItemState.Focus)==0)
{
e、 图形。填充矩形(画笔。白色,e。边界);
e、 Graphics.DrawString(comboBox1.Items[e.Index].ToString(),f,Brush.Black,
新点(e.Bounds.X,e.Bounds.Y+yOffset);
}
其他的
{
e、 图形。填充矩形(画笔。蓝色,e。边界);
e、 Graphics.DrawString(comboBox1.Items[e.Index].ToString(),f,Brush.White,
新点(e.Bounds.X,e.Bounds.Y+yOffset);
}
}


您还必须将
DropDownStyle
设置为
DropDownList
以使突出显示正常工作,并且需要将
DrawMode
设置为
OwnerDrawFixed
。(或者到
OwnerDrawVariable
,如果您想为某些ITME设置不同的高度…)

“…不触摸字体大小。当我更改字体大小时…”我不明白。我的意思是,当我更改“font”属性的大小时,组合框高度会自动更改。但我只想改变组合框的高度。不是字体大小。显然,您应该使用系统颜色,请参见下文,并希望根据您的字体和项目大小调整yOffset。SolidBrush backBrush=新的SolidBrush(SystemColors.Window);SolidBrush fontBrush=新的SolidBrush(SystemColor.WindowText);SolidBrush backBrush=新的SolidBrush(SystemColors.Highlight);SolidBrush fontBrush=新的SolidBrush(SystemColor.HighlightText);backBrush.Dispose();fontBrush.Dispose();成功了。但我还有最后一个问题。我已经编辑了我的答案。嗯,我现在不太确定。我到处玩了一下,发现我的测试组合总是显示文本部分,就像它正在克隆它一样。这包括字体颜色位置等。。所以我不能重现你的结果。我引用的帖子是关于对齐文本的,尽管它说ownerdraw在这方面没有帮助。如果可能的话,我需要在数据绑定之后设置。因为DrawItem事件在选定项更改时激发。