首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# Winforms.在矩形内准确居中绘制文本

C# Winforms是一种用于开发Windows桌面应用程序的编程语言和框架。在矩形内准确居中绘制文本可以通过以下步骤实现:

  1. 创建一个Winforms应用程序,并在窗体上添加一个矩形区域(例如使用Panel控件)。
  2. 在矩形区域内绘制文本,可以使用Graphics对象的DrawString方法。
  3. 计算文本的宽度和高度,可以使用Graphics对象的MeasureString方法。
  4. 根据矩形区域的宽度和高度以及文本的宽度和高度,计算出文本的居中位置。
  5. 使用Graphics对象的TranslateTransform方法将坐标原点移动到矩形区域的中心。
  6. 使用Graphics对象的DrawString方法在居中位置绘制文本。

以下是一个示例代码:

代码语言:csharp
复制
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WinformsApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            Rectangle rect = new Rectangle(50, 50, 200, 100); // 矩形区域的位置和大小

            string text = "Hello, World!"; // 要绘制的文本

            Font font = new Font("Arial", 12); // 文本的字体和大小
            StringFormat format = new StringFormat(); // 文本的对齐方式,默认为左上角对齐

            SizeF textSize = e.Graphics.MeasureString(text, font); // 计算文本的宽度和高度

            float x = rect.Left + (rect.Width - textSize.Width) / 2; // 计算文本的居中位置
            float y = rect.Top + (rect.Height - textSize.Height) / 2;

            e.Graphics.TranslateTransform(x, y); // 将坐标原点移动到矩形区域的中心

            e.Graphics.DrawString(text, font, Brushes.Black, PointF.Empty, format); // 在居中位置绘制文本
        }
    }
}

这个示例代码演示了如何在矩形区域内准确居中绘制文本。你可以根据实际需求调整矩形区域的位置和大小、文本的内容和样式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#中使用OpenCvSharp4绘制直线、矩形、圆、文本

C#中使用OpenCvSharp4绘制直线、矩形、圆、文本 继之前的Python中使用Opencv-python库绘制直线、矩形、圆、文本和VC++中使用OpenCV绘制直线、矩形、圆和文字,将之前的Python...中使用OpenCvSharp4绘制直线、矩形、圆、文本 1、使用VS2022创建一个C# .Net控制台程序,项目命名为OpenCVExample 2、安装OpenCvSharp4库 安装OpenCvSharp4...和OpenCvSharp4.runtime.win两个NuGet包,或者直接安装OpenCvSharp4.Windows 3、使用OpenCvSharp4绘制直线、矩形、圆、文本 对应的C#代码如下...(0,0)和右下角(250,350)处绘制一个红色矩形,边界线条厚度为2 Cv2.Rectangle(img, new Point(0, 0), new Point(250, 350....Circle(img, new Point(400, 50), 30, new Scalar(255, 255, 0), 2); // (350,300)处绘制文字,字体为FONT_HERSHEY_COMPLEX

4300

Python之pygame学习绘制文字制作滚动文字(6)

pygame绘制文字 ✕ 今天来学习绘制文本内容,毕竟游戏中还是需要文字对玩家提示一些有用的信息。 字体常用的不是很多,pygame中大多用于提示文字,或者记录分数等事件。...字体绘制基本分为以下几个步骤: 初始化字体模块 pygame.init() 创建一个字体对象 可以从文件或者系统字体选取 pygame.font.SysFont('幼圆',50) 绘制文本对象。...Rect也可以作为目标传递,矩形的topleft角将用作blit的位置。目标矩形的大小不会影响blit。 也可以传递可选的区域矩形。这表示要绘制的源Surface的较小部分。...也就是我们需要绘制的元素,需要绘制的位置输入进去,可以接受矩形区域的位置参数。 这里还演示了获取文本宽高,让文本屏幕居中滚动的效果。...# pygame.font.Font('文件或对象',大小) # 新Surface上绘制文本 # 显示内容、是否消除锯齿、字体颜色、背景颜色 text =

3.8K30

Android 自定义View之随机数验证码(仿写鸿洋)

步骤 先分析一下上图中的效果: 带颜色的矩形背景 居中文本 比较简单,老手稍微想一下就已经有思路了: 1.自定义属性 2.添加构造方法 3.构造里获取自定义样式 4.重写onDraw计算坐标绘制 5...,通过矩形的宽高即可知道文字的宽高,所以宽高会保存在bounds里,bounds是一个矩形Rect,为什么要这么做呢,因为后面我们要计算文字居中的时候会用到。...里面显示绘制了一个YELLOW颜色的矩形背景,然后绘制了一个自定义属性颜色的居中文本。...mode也有3种模式: EXACTLY:一般是设置了明确的值或者是MATCH_PARENT AT_MOST:表示子布局限制一个最大值,一般为WARP_CONTENT UNSPECIFIED:表示子布局想要多大就多大...heightMeasureSpec) /** * EXACTLY:一般是设置了明确的值或者是MATCH_PARENT * AT_MOST:表示子布局限制一个最大值

29920

Draw Text in Deep

这个API返回的是当前绘制文字的最小矩形,即能完全包裹文字的矩形范围。...,一共有三种,LEFT、CETNER和RIGHT,默认值为LEFT,它的作用是绘制的时候确定绘制的方向,例如设置为LEFT,那么文本绘制的时候,就是从baseline的StartX开始向右绘制文本,如果是...CENTER,那么就是从StartX开始,向两边开始绘制文字,同理,RIGHT为StartX向左开始绘制文本,这里要注意的是,TextAlign确定的是方向,而非在显示区域的对齐方式,它的一个作用是帮助开发者进行居中绘制...文本会根据基准线的中点开始向左右开始绘制文字,最终自然就变成了居中显示了。如果你设定了RIGHT,那么从baseline的StartX的右边开始绘制。 通过下面这个例子,可以很清楚的了解这一原理。...文本居中绘制 Android中文本绘制都是使用baseline进行定位的,通过fontMetrics和已知的区域坐标,是可以推算出文字的其它关键坐标的,所以,文本在任意区域的任意位置绘制问题,其实就是一个坐标运算的问题

1.4K30

学习笔记 :DrawText

int nCount, // 字符串的长度 LPRECT lpRect, // 指向矩形结构RECT的指针 UINT uFormat // 正文的绘制选项 ); 参数 hdc: [输入]设备环境句柄...如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行。...如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符。出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本。...DT_CENTER:指定文本水平居中显示。 DT_VCENTER:指定文本垂直居中显示。该标记只单行文本输出时有效,所以它必须与DT_SINGLELINE结合使用。...这个参数传入时是做为计算文本显示的矩形大小,返回时就是文本实际占用的矩形大小。 同时DrawText运算后也会有函数返回值的,就是文本实际的高度。

1K50

画布就是一切(一)— 画布编程的基本模式

还记得以前开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib...在这个场景中,只要鼠标坐标矩形区域,那么我们就会修改矩形的hover为true,否则为false。...,我们接下来需要需要考虑“鼠标矩形区域”这个条件成立与否。...canvas中,我们需要知道如下的几个数据:矩形的位置、矩形的大小以及鼠标canvas中的位置,如下图所示: 只要满足如下的条件,我们就认为鼠标矩形,于是就会发生状态的更新: (x <= xInCanvas...上进行移动,移动的过程中,鼠标矩形外部移动的时候,控制台会不断的输出文本:mouse in rect: false,而当鼠标一旦进入了矩形内部,控制台则会输出:mouse in rect: true。

19320

画布就是一切(一)— 画布编程的基本模式

还记得以前开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib...在这个场景中,只要鼠标坐标矩形区域,那么我们就会修改矩形的hover为true,否则为false。...,我们接下来需要需要考虑“鼠标矩形区域”这个条件成立与否。...canvas中,我们需要知道如下的几个数据:矩形的位置、矩形的大小以及鼠标canvas中的位置,如下图所示: 只要满足如下的条件,我们就认为鼠标矩形,于是就会发生状态的更新: (x <= xInCanvas...上进行移动,移动的过程中,鼠标矩形外部移动的时候,控制台会不断的输出文本:mouse in rect: false,而当鼠标一旦进入了矩形内部,控制台则会输出:mouse in rect: true。

18120

画布就是一切(一)— 画布编程的基本模式

还记得以前开发C#的时候,接触过一个的C# WinForm库NetronGraphLib,这个库能够让我们轻松的构建属于自己的流程图绘制软件,让我们能够以拖拉拽的方式来构建图(下图就是NetronGraphLib...在这个场景中,只要鼠标坐标矩形区域,那么我们就会修改矩形的hover为true,否则为false。...,我们接下来需要需要考虑“鼠标矩形区域”这个条件成立与否。...canvas中,我们需要知道如下的几个数据:矩形的位置、矩形的大小以及鼠标canvas中的位置,如下图所示: 只要满足如下的条件,我们就认为鼠标矩形,于是就会发生状态的更新: (x <= xInCanvas...上进行移动,移动的过程中,鼠标矩形外部移动的时候,控制台会不断的输出文本:mouse in rect: false,而当鼠标一旦进入了矩形内部,控制台则会输出:mouse in rect: true。

21810

关于“Python”的核心知识点整理大全38

14.1.1 创建 Button 类 由于Pygame没有内置创建按钮的方法,我们创建一个Button类,用于创建带标签的实心矩形。 你可以游戏中使用这些代码来创建任何按钮。...实参None让Pygame使用默认字体,而48 指定了文本的字号。为让按钮屏幕上居中,我们创建一个表示按钮的rect对象(见4),并将 其center属性设置为屏幕的center属性。...2处,我们让文本图像在按钮上居中:根据文本图像创建一个rect,并将其center属性设 置为按钮的center属性。...Play按钮位于其他所有屏幕元素上面,我们绘制其他所有游戏元素后再绘制这个按 钮,然后切换到新屏幕。...我们将这些值传递 给函数check_play_button()(见3),而这个函数使用collidepoint()检查鼠标单击位置是否 Play按钮的rect(见4)。

12810

【愚公系列】2024年01月 GDI+绘图专题 DrawString

欢迎 点赞✍评论⭐收藏 前言 DrawString是C#中Graphics类的一个方法,用于指定的位置绘制文本WinForm应用程序中使用DrawString,可以在窗体或控件上绘制文本。...例如,使用LinearGradientBrush可以为文本添加渐变色效果。 3.精确控制文本 3.1 文本居中 使用GDI+绘制文本时,可以使用DrawString方法来绘制。...绘制WinForm的画布中心位置,可以先计算出文本绘制所需的区域大小,然后将文本绘制起始位置设置为画布中心减去文本绘制区域大小的一半,如下所示: private void Form1_Paint(object...这个例子中测量的字符串是"Hello World",字体是Arial、大小为12磅,并且大小被限制100x100的矩形区域绘制字符串时,我们将使用黑色刷子,位置位于(10,10)。...接着,我们使用Graphics对象的DrawString方法来绘制文本,其中第四个参数是绘制文本矩形区域,第五个参数是我们创建的StringFormat对象。

29011

Python 项目实践一(外星人入侵小游戏)第五篇

我们还将修改这个游戏,使其玩家的等级提高时加快节奏,并实现一个记分系统。 一 添加Play按钮 由于Pygame没有内置创建按钮的方法,我们创建一个Button类,用于创建带标签的实心矩形。...(3)方法prep_msg()接受实参self以及要渲染为图像的文本(msg)。调用font.render()将存储msg中的文本转换为图像,然后将该图像存储msg_image中。...(4)方法font.render()还接受一个布尔实参,该实参指定开启还是关闭反锯齿功能(反锯齿让文本的边缘更平滑) (5)screen.fill()来绘制表示按钮的矩形,再调用screen.blit(...),并向它传递一幅图像以及与该图像相关联的rect对象,从而在屏幕上绘制文本图像。...(3)使用collidepoint()检查鼠标单击位置是否Play按钮的rect,如果是这样的,我们就将game_active设置为True,让游戏就此开始!

1.9K80

Canvas画布

canvas介绍 Canvas(画布)组件为Tkinter的图形绘制提供了基础 Canvas是一个通用的组件,通常用于显示和编辑图形。...可以用它来绘制线段、圆形、多边形,甚至是绘制其他组件,创建图形编辑器,并实现各种自定义的小组件。...= , yscrollcommand = , 绘制对角线 create_line(x,y,x2,y2, fill = '', width = , dash = (3,5) ) 绘制矩形 create_rectangle...(x1,y1,x2,y2) 绘制椭圆 create_oval(x1,y1,x2,y2) 显示文字 (x,y)位置创建一个文本对象 **options可选项: text 要显示的文本内容 fill 填充的颜色...,空字符表示透明 width 设置后文本会在该宽度处自动换行 不设定,文本的宽度等于文本最长的宽度 anchor 指定文本的相对位置,默认为center居中 N,S,W,E,NE,NW,SE,SW anchor

1.3K20

图像处理程序框架—MFC相关知识点

返回值:先前的旧对象的指针 CDC::SetBkMode 设置背景模式  int SetBkMode(int nBkMode); 参数:nBkMode为要设置的背景模式,取值可以为: OPAQUE 绘制文本前用当前背景色填充背景...LPTEXTMETRIC lpMetrics)const; 参数:lpMetrics 指向用于接收字体规格的TEXTMETRIC结构 返回值:若成功,返回非0;否则返回0 CDC::DrawText 指定的矩形绘制格式化的文本...;str为要输出的CString对象;nFormat为格式化文本的方式,常用取值: DT_BOTTOM 文本底对齐,必须和DT_SINGLELINE联用; DT_CENTER 居中显示文本; DT_LEFT... 文本左对齐; DT_RIGHT 文本右对齐; DT_TOP 正文与行顶部对齐(仅指单个行); DT_NOCLIB 绘制时不加裁减;DT_SINGLELINE 单行显示; DT_VCENTER 指定在垂直方向上居中显示文本...(注意,重复创建CPaintDC实例会失败也因为如此) 如果我们OnPaint中绘制,那么在打印机上绘制我们就需要再写一个OnPrint函数,重新绘制。这样,程序设计者就需要维护两套代码。

1.4K20

WPF 使用 Edge 浏览器

本文告诉大家如何使用 Windows Community Toolkit 的新控件, WPF 使用 Edge 浏览器 首先需要通过 VisualStudio 创建 WPF 项目。...但是运行的时候就看不到按钮了,所以存在层级问题,这个问题是08年就有大神说到的问题。...大概就是如果同时有多个渲染,WPF 、 WinForms 如果两个绘制矩形有重叠,那么重叠部分就不能正常使用。 ?...一个解决方法是:chris84948/AirspaceFixer: AirspacePanel fixes all Airspace issues with WPF-hosted Winforms....添加多个浏览器 如果在相同矩形区域添加多个浏览器,逻辑树第一个浏览器显示最前 我代码打开了我的博客和黄腾霄博客,结果发现我的博客显示在前面 <wpf:WebView x:Name=

2.3K10

Qt 之图形(QPainter 的基本绘图)「建议收藏」

QPainter 用于执行绘图操作,其提供的 API GUI 或 QImage、QOpenGLPaintDevice、QWidget 和QPaintDevice 显示图形(线、形状、渐变等)、文本和图像...QPaintEngine 提供了一些接口,可用于 QPainter 不同的设备上进行绘制。...QPainter 一般部件的绘图事件 paintEvent() 中进行绘制,首先创建 QPainter 对象,然后进行图形的绘制,最后记得销毁 QPainter 对象。...,这里的 rect() 是指当前窗体的显示区域,Qt::AlignCenter 指文本居中绘制。...然后使用setBrush() 来设置画刷颜色(橙色),用来填充矩形区域,最后调用 drawRect() 来实现矩形绘制,其中参数依次顺序为 x、y、w、h,是指区域从 x 为 50,y 为 50 的坐标点起

3.9K40

计算机科学里最大的难题:居中显示

图 标 图标就像是与文本排成一行的小矩形。因此,所有由文本和行高引起的问题这里也都存在。众所周知,将文本与旁边的图标对齐是一项艰巨的任务。...图标字体 对齐矩形相对简单。对齐文本则很困难。图标是矩形。如果我们把图标放到字体文件中会怎样呢? 现在,我们什么也对不齐了: 我们也没法设置图标大小。...现在,文本块的边界框看起来像下面这样: 问题在于,它还可以像下面这样: 或这样: 现在,如果你试图通过居中边界框来居中文本会怎样? 虽然矩形实现了完美居中,但文本还是偏了。...为了帮你做出决策,我画了下面这张图: 看看苹果公司怎么费力地将复选标记放入矩形,以及将矩形放到文本标签旁: 然而他们还是失败了! 没有什么比对齐两个矩形更容易的了。...因此,对于任何需要手动补偿的内容,可以将其放置一个足够大的矩形中,并在其中实现图标视觉效果的平衡: 我们能做些什么:所有人 请一定注意。请务必小心。

7310

计算机科学里最大的难题:居中显示

图 标 图标就像是与文本排成一行的小矩形。因此,所有由文本和行高引起的问题这里也都存在。众所周知,将文本与旁边的图标对齐是一项艰巨的任务。...图标字体 对齐矩形相对简单。对齐文本则很困难。图标是矩形。如果我们把图标放到字体文件中会怎样呢? 现在,我们什么也对不齐了: 我们也没法设置图标大小。...现在,文本块的边界框看起来像下面这样: 问题在于,它还可以像下面这样: 或这样: 现在,如果你试图通过居中边界框来居中文本会怎样? 虽然矩形实现了完美居中,但文本还是偏了。...为了帮你做出决策,我画了下面这张图: 看看苹果公司怎么费力地将复选标记放入矩形,以及将矩形放到文本标签旁: 然而他们还是失败了! 没有什么比对齐两个矩形更容易的了。...因此,对于任何需要手动补偿的内容,可以将其放置一个足够大的矩形中,并在其中实现图标视觉效果的平衡: 我们能做些什么:所有人 请一定注意。请务必小心。

8210
领券