-
在原生的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中重新绘制我没 有进行尝试,有试过的朋友可以进行留言;
本文介绍了一种在ComboBox中使文本居中的方法。通过设置DrawMode属性并利用DrawItem事件来调整下拉项的位置,同时提供了另一种初始化时通过计算添加空格实现居中的方案。

7695

被折叠的 条评论
为什么被折叠?



