C# ComboBox 文本居中设置

本文介绍了一种在ComboBox中使文本居中的方法。通过设置DrawMode属性并利用DrawItem事件来调整下拉项的位置,同时提供了另一种初始化时通过计算添加空格实现居中的方案。
  • 在原生的ComboBox功能中没有属性是设置文本位置,默认位置为左对齐;想要把其中的文本设置为居中但是没有直接方法;

  • 方案一:网上流传比较多方法:
    第一步:先将combobox的DrawMode属性设置为OwnerDrawFixed; 在这里插入图片描述
    第二步:在comboBox的DrawItem事件方法中重新绘制item选项的位置;这里不做细说,附网址https://zhidao.baidu.com/question/143123179.html
    在这里插入图片描述
    但是这种方法有一个弊端:居中的只是下拉项;而显示区域的文本不会居中;
    So作者又进行了第三步:给显示区域的文本进行居中;方法是
    //字符所占空间大小方法,用于求空格宽度和选项字符串宽度; Font是字符串的样式
    Graphics graphics = CreateGraphics();
    SizeF size_item = graphics.MeasureString(“ ”, Font);

    剩余宽度=(控件宽(可知)-文本宽(可知))/2;
    空格个数=剩余宽度/空格宽度;
    显示项=(空格个数*n )拼接+原文本.Trim();

问题:1、不能正确居中,把空格换成“-”就行,想不通;
2、在选择其他选项后显示文本又变成左对齐(自动把添加的空格去掉了);
3、在SelectIndex事件中给Items重新复制会导致 死循环!!!!

  • 方案二:踏过前面的坑,想直接在初始化时候就根据宽度给每个选择项都添加空格设置居中;
    上代码
	        float w1 = comboBox1.Width;
            comboBox1.SelectedIndex=0;
            Graphics graphics = CreateGraphics();
            SizeF sizeF_sp = graphics.MeasureString(" ", comboBox1.Font);						//空格宽度
            for (int i = 0; i < comboBox1.Items.Count; i++)
            {
                SizeF sizeF_1 = graphics.MeasureString(comboBox1.Items[i].ToString().Trim(), comboBox1.Font);      // 选中字宽度
                int spmun = (int)(((w1 - sizeF_1.Width) / 2) / sizeF_sp.Width);
                StringBuilder sb = new StringBuilder();
                for (int j = 0; j < spmun; j++)
                {
                    sb.Append(" ");
                }
                sb.Append(comboBox1.Items[i].ToString());
                comboBox1.Items[i] = sb.ToString();
            }  
  • 还有就是直接重绘,每次选择项之后,在SelectIndex_Changed 或者SelectValue_Changed中重新绘制我没 有进行尝试,有试过的朋友可以进行留言;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值