![cover](https://img-blog.csdnimg.cn/img_convert/5bbc102f2243430991aedee1be20b4f3.png)
C# winform 让ComboBox控件的文本居中方法
技术是好的与坏的,好人用技术是更好的,坏人用技术是更坏的。阅读好书,阅读大部分人未阅读过与课堂没有的书,阅读这片土地没有的知识就能增加一种思辨思维与智慧,才能走出狭隘思维偏见的洞穴!具体来说,它使用StringFormat类来设置文本的对齐方式,然后使用Graphics类的DrawString方法在指定的位置绘制文本。柏拉图在他的巨著《理想国》的第七卷里写到了洞穴理论阐明:一群从小被囚禁生活在洞穴
在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文本框文本居中,可以通过以下步骤实现:
- 打开Visual Studio,打开你的C#项目。
- 找到ComboBox1控件,双击打开它的属性窗口。
- 在属性窗口中找到DropDownStyle属性,将其设置为DropDownList。
- 在属性窗口中找到DrawMode属性,将其设置为OwnerDrawFixed。
- 在属性窗口中找到ItemHeight属性,将其设置为ComboBox1的高度。(这步可以不用管)
- 在属性窗口中找到DrawItem事件,双击打开它的代码编辑器。
- 在代码编辑器中添加以下代码:
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的文本居中,可以通过以下步骤实现:
- 打开Visual Studio,创建一个Windows Forms应用程序。
- 在窗体上添加一个ComboBox控件。
- 在ComboBox控件的属性窗口中,找到DropDownStyle属性,将其设置为DropDown。
- 在ComboBox控件的属性窗口中,找到DrawMode属性,将其设置为OwnerDrawFixed。
- 在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》、扎米亚京《我们》、阿道司·赫胥黎《美丽新世界》,有多个译本,选择喜欢且好的译本就行了;还有柏拉图的《理想国》、[法]孟德斯鸠的《论法的精神》、哈耶克《通向奴役之路》(港版)(港版翻译较好大陆版本,英语过硬的最好看英文原版),现在网店都有售卖!阅读好书,阅读大部分人未阅读过与课堂没有的书,阅读这片土地没有的知识就能增加一种思辨思维与智慧,才能走出狭隘思维偏见的洞穴!
柏拉图在他的巨著《理想国》的第七卷里写到了洞穴理论阐明:一群从小被囚禁生活在洞穴里人,在洞穴外面的光线照明下,往内看是一片片黑影,往外看是光明的海阔天空,越看越明亮!
见多识广,包容的人更自信、思维更多元,包容好的文化使人更强大,越自信越包容越强大!包容让你用上网络、电话、各种电器、汽车、芯片、铁路、高铁................
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)