C# winform 让ComboBox控件的文本居中方法

在C#中,当将ComboBox的属性DropDownStyle设置为DropDownList后,ComboBox2框的文本默认是靠左对齐的。

用ComboBox1举例,让下拉文本居中,订阅事件:

 public Form2()
        {
            InitializeComponent();

            comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
            comboBox1.DrawItem += new DrawItemEventHandler(comboBox1_DrawItem);
            
        }

这段代码的作用是设置一个名为comboBox2的组合框控件的绘制模式为OwnerDrawFixed,并将一个名为comboBox2_DrawItem的事件处理程序添加到该控件的DrawItem事件中。

在C#中,ComboBox控件有几种绘制模式,包括Normal、OwnerDrawFixed、OwnerDrawVariable和Professional。在Normal模式下,ComboBox控件使用默认的绘制方式来呈现其项。而在OwnerDrawFixed和OwnerDrawVariable模式下,开发人员可以自定义ComboBox控件的绘制方式,以便更好地满足应用程序的需求。

ComboBox1的DrawItem的事件:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index < 0)
    {
        return;
    }

    e.DrawBackground();

    string text = comboBox1.GetItemText(comboBox1.Items[e.Index]);
    SizeF textSize = e.Graphics.MeasureString(text, comboBox1.Font);

    float left = (float)(e.Bounds.Width - textSize.Width) / 2;
    float top = (float)(e.Bounds.Height - textSize.Height) / 2;

    e.Graphics.DrawString(text, comboBox1.Font, Brushes.Black, e.Bounds.Left + left, e.Bounds.Top + top);

    e.DrawFocusRectangle();
}

这段代码使用了DrawMode.OwnerDrawFixed属性来自定义ComboBox1的绘制方式。然后,我们订阅了DrawItem事件,该事件在每个项绘制时触发。在事件处理程序中,我们首先绘制了背景,然后获取当前项的文本并测量其大小。接下来,我们计算文本应该绘制的位置,以使其居中对齐。最后,我们使用Graphics.DrawString方法将文本绘制到ComboBox1中。

上面方法只是让下拉文本居中,但无法让ComboBox1框的文本居中,如图:

要让ComboBox1设置DropDownStyle属性设置为DropDownList的文本居中与ComboBox1文本框文本居中,可以通过以下步骤实现:

  1. 打开Visual Studio,打开你的C#项目。
  2. 找到ComboBox1控件,双击打开它的属性窗口。
  3. 在属性窗口中找到DropDownStyle属性,将其设置为DropDownList。
  4. 在属性窗口中找到DrawMode属性,将其设置为OwnerDrawFixed。
  5. 在属性窗口中找到ItemHeight属性,将其设置为ComboBox1的高度。(这步可以不用管)
  6. 在属性窗口中找到DrawItem事件,双击打开它的代码编辑器。
  7. 在代码编辑器中添加以下代码:
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (e.Index < 0) return;
            e.DrawBackground();
            e.DrawFocusRectangle();
            string text = comboBox1.GetItemText(comboBox1.Items[e.Index]);
            using (StringFormat sf = new StringFormat())
            {
                sf.Alignment = StringAlignment.Center;
                e.Graphics.DrawString(text, e.Font, Brushes.Black, e.Bounds, sf);
            }
        }

8.保存并运行你的程序,ComboBox1的文本现在应该已经居中了。

如果让ComboBox1下拉框与文本框显示无色可以再添加这行代码

e.Graphics.FillRectangle(Brushes.White, e.Bounds);

或者

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    if (e.Index >= 0)
    {
        string text = comboBox1.Items[e.Index].ToString();
        using (StringFormat sf = new StringFormat())
        {
            sf.Alignment = StringAlignment.Center;
            e.Graphics.DrawString(text, e.Font, Brushes.Black, e.Bounds, sf);
        }
    }
    e.DrawFocusRectangle();
}

这段代码的作用是在ComboBox控件的绘制事件中,将下拉列表中的文本居中对齐。具体来说,它使用StringFormat类来设置文本的对齐方式,然后使用Graphics类的DrawString方法在指定的位置绘制文本。

在ComboBox1的DrawItem事件中,将ComboBox1的文本居中显示,将文本居中显示,如下图:

如果只让ComboBox下拉框文本居中,ComboBox框中的文本居左不变:

ComboBox控件是一个常用的下拉列表框控件。默认情况下,ComboBox控件的文本是居中对齐的。如果想要只让ComboBox1的下拉文本居中,但不让ComboBox1的文本居中,可以通过以下步骤实现:

  1. 打开Visual Studio,创建一个Windows Forms应用程序。
  2. 在窗体上添加一个ComboBox控件。
  3. 在ComboBox控件的属性窗口中,找到DropDownStyle属性,将其设置为DropDown
  4. 在ComboBox控件的属性窗口中,找到DrawMode属性,将其设置为OwnerDrawFixed。
  5. 在ComboBox控件的事件中,添加以下代码:
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    if (e.Index >= 0)
    {
        string text = comboBox1.Items[e.Index].ToString();
        using (StringFormat sf = new StringFormat())
        {
            sf.Alignment = StringAlignment.Center;
            e.Graphics.DrawString(text, e.Font, Brushes.Black, e.Bounds, sf);
        }
    }
    e.DrawFocusRectangle();
}


 

默认不居中,ComboBox1的DrawItem事件中:

 e.DrawBackground();
            if (e.Index >= 0)
            {
                StringFormat sf = new StringFormat();
                sf.LineAlignment = StringAlignment.Center;
                e.Graphics.DrawString(comboBox2.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, sf);
            }

上面方法直供参考,实际应用可以根据需求修改,有更好的方法欢迎补充!

上面内容用于记录自己的学习与分享,分享让技术更进一步!

技术来源于思想自由、独立思考、辩证分析、逻辑思维与人类自由的创新,来服务于人类生活各种方便,而不是为了用技术打造思想鸿沟围城来制造愚蠢;技术是好的与坏的,好人用技术是更好的,坏人用技术是更坏的。推荐好书:乔治.奥威尔的《1984》、扎米亚京《我们》、阿道司·赫胥黎《美丽新世界》,有多个译本,选择喜欢且好的译本就行了;还有柏拉图的《理想国》、[法]孟德斯鸠的《论法的精神》、哈耶克《通向奴役之路》(港版)(港版翻译较好大陆版本,英语过硬的最好看英文原版),现在网店都有售卖!阅读好书,阅读大部分人未阅读过与课堂没有的书,阅读这片土地没有的知识就能增加一种思辨思维与智慧,才能走出狭隘思维偏见的洞穴!

柏拉图在他的巨著《理想国》的第七卷里写到了洞穴理论阐明:一群从小被囚禁生活在洞穴里人,在洞穴外面的光线照明下,往内看是一片片黑影,往外看是光明的海阔天空,越看越明亮!

见多识广,包容的人更自信、思维更多元,包容好的文化使人更强大,越自信越包容越强大!包容让你用上网络、电话、各种电器、汽车、芯片、铁路、高铁................

猜你喜欢

转载自blog.csdn.net/m0_58015531/article/details/131340750