C# Button text 重写时,字不居中

从不签到 从不签到 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如题
重写button,使每个字的颜色不同
主要代码如下
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
base.OnPaint(pe); //调用父控件的方法
string strA = "ABCD";
SizeF txtSize = g.MeasureString(strA, this.Font);
char[] cOutput = strA.ToCharArray();
int iLength = strA.Length;
DrawButtonText(g, cOutput, txtSize, iLength);
}
//重画Button的文本(Text),不使用图案填充
private void DrawButtonText(Graphics dbg,char[] txt, SizeF siz, int len)
{
int wid = (int)(siz.Width / len); //每个字的长度
StringFormat format = new StringFormat();
format.LineAlignment = StringAlignment.Center;//居中
format.Alignment = StringAlignment.Center;//居中

//button的长度减去字符总的长度,然后/2就是第一个字母的x坐标,y一样
Single x = (this.Width - siz.Width) / 2;
//Y position
Single y = (this.Height - siz.Width) / 2;

dbg.DrawString(txt[0].ToString(), this.Font, new SolidBrush(Color.Red), x, y, format);
dbg.DrawString(txt[1].ToString(), this.Font, new SolidBrush(Color.Black), x + wid, y, format);
dbg.DrawString(txt[2].ToString(), this.Font, new SolidBrush(Color.Pink), x + wid * 2, y, format);
dbg.DrawString(txt[3].ToString(), this.Font, new SolidBrush(Color.Green), x + wid * 3, y, format);
}

但是结果是,字符偏左,偏上
哪里不对?请指正,谢谢。
...全文

相关推荐

C#实现按钮Button的重写

C#实现按钮Button的重写,C#漂亮按钮

yangzaixing115

C# 自定义 Button 控件开发:3 步实现鼠标悬停变色与图标切换

本文详细介绍了如何在C#中开发自定义Button控件,通过3个步骤实现鼠标悬停变色与图标切换功能。从创建控件基础框架到实现动态交互属性和处理鼠标事件,帮助开发者轻松增强WinForms应用程序的UI交互体验。

weixin_30407613

C# Winform扫雷游戏开发:从基础控件到自定义绘制的实战指南

事件驱动编程是构建交互式桌面应用的核心原理,它通过响应用户操作来更新程序状态。在C#桌面开发领域,Windows Forms(Winform)作为经典的UI框架,因其开发效率高、资源消耗低,在工业控制、企业内部工具等场景中仍有广泛应用。掌握Winform开发,不仅能快速构建原型,更是理解控件布局、数据绑定和自定义绘制等技术价值的实践途径。本文以开发一个完整的扫雷游戏为例,深入探讨了如何运用【多线程处理】与【数据持久化】等关键技术,实现从基础Button控件方案到高性能自定义绘制控件的演进,涵盖了游戏逻辑状态

weixin_30723433

【C#源码】messageBox居中父窗体

API自带的messagebox是居中屏幕的,在写小程序时,往往希望居中父窗体。

春风世界

探寻C# Button双击事件

C# Button双击事件大家一定相当熟悉了,本文笔者又再一次为你阐述了C# Button双击事件的原理及实现 方法。 C# Button是有DoubleClick事件的,只是它没有出现在事件列表中,而且.net也是把这个事件给"屏蔽" 掉了,无论你双击一个按钮怎么快,也不会触发这个事件。 为了能够触发C# Button的双击事件,我们可以重载MouseDown事件,记录每次鼠标按下的时间,如果 两次点击的时间足够近的话,就触发一次双击方法。 这样也大致能够达到双击的效果,我所采用的方法其实和这个类似,是继承Button类,重载Button类的 Click事件,在Click事件中判断两次点击的时间,如果近的话,就触发双击事件。

bishuyuan
评论 7
收藏 已收藏
分享
返回顶部
从不签到
C# 111,128 成员 642,537 内容