Winfrom GDI绘制圆角矩形(边框、颜色、内部样式和字体)

绘制圆角矩形 ,拷贝就能使用

        /// <summary>
        /// 绘制Panel容器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Set_Paint(object sender, PaintEventArgs e)
        {
            //圆角矩形实心颜色,交叉对角线的模式:HatchStyle.DiagonalCross,Color.White前景色、Color.Red背景色
            Brush brush = new HatchBrush(HatchStyle.DiagonalCross, Color.White, Color.Red);
            //圆角矩形边框颜色
            Pen pen = new Pen(Color.Black, 2);
            pen.DashStyle = DashStyle.Dash;
            //初始化确定圆角实心矩形初始X、Y位置和Width、height宽高
            Rectangle rectangle = new Rectangle(4,4,82,44);
            //绘制圆角矩形、实现方法
            FillRoundRectangle(e.Graphics, rectangle, brush, pen, 15); 
        } 

        /// <summary>  
        /// C# GDI+ 绘制圆角实心矩形  
        /// </summary>  
        /// <param name="g">Graphics 对象</param>  
        /// <param name="rectangle">要填充的矩形</param>  
        /// <param name="brush">填充背景色和样式</param> 
        /// <param name="pen">外部边框颜色和样式</param>
        /// <param name="r">圆角半径</param>  
        public void FillRoundRectangle(Graphics g, Rectangle rectangle, Brush brush,Pen pen, int r)
        {
            rectangle = new Rectangle(rectangle.X, rectangle.Y, rectangle.Width - 1, rectangle.Height - 1); //确定圆角实心矩形初始X、Y位置和Width、height宽高
            g.FillPath(brush, GetRoundRectangle(rectangle, r)); //绘制圆角实心矩形
            g.DrawPath(pen, GetRoundRectangle(rectangle, r));   //绘制圆角实心矩形边框

            Brush brush_word = new SolidBrush(Color.Black);  //绘制的字体颜色(new记得放在方法外)
            g = this.panel.CreateGraphics();//为panel容器创建Graphics对象
            Font ft = new Font("黑体", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));//定义字体
            g.DrawString("Hello", ft, brush_word, (rectangle.Width / 2) - 10, (rectangle.Height / 2) - 5);
        }

        /// <summary>  
        /// 根据普通矩形得到圆角矩形的路径  
        /// </summary>  
        /// <param name="rectangle">原始矩形</param>  
        /// <param name="r">半径</param>  
        /// <returns>图形路径</returns>  
        private static GraphicsPath GetRoundRectangle(Rectangle rectangle, int r)
        {
            int l = 2 * r;
            // 把圆角矩形分成八段直线、弧的组合,依次加到路径中  
            GraphicsPath gp = new GraphicsPath();
            gp.AddLine(new Point(rectangle.X + r, rectangle.Y), new Point(rectangle.Right - r, rectangle.Y));
            gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Y, l, l), 270F, 90F);

            gp.AddLine(new Point(rectangle.Right, rectangle.Y + r), new Point(rectangle.Right, rectangle.Bottom - r));
            gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Bottom - l, l, l), 0F, 90F);

            gp.AddLine(new Point(rectangle.Right - r, rectangle.Bottom), new Point(rectangle.X + r, rectangle.Bottom));
            gp.AddArc(new Rectangle(rectangle.X, rectangle.Bottom - l, l, l), 90F, 90F);

            gp.AddLine(new Point(rectangle.X, rectangle.Bottom - r), new Point(rectangle.X, rectangle.Y + r));
            gp.AddArc(new Rectangle(rectangle.X, rectangle.Y, l, l), 180F, 90F);
            return gp;
        }

 效果图:边框、颜色、内部字符串按实际情况定义即可,一般会满足各种情况

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WinForm是微软提供的一种用于创建Windows应用程序的UI开发框架,可以用C#或VB.NET编写。要在WinForm绘制网格图片,可以使用Graphics对象和Paint事件。 首先,在WinForm的设计视图中创建一个PictureBox控件,该控件将用于显示网格图片。然后,在代码视图中为PictureBox控件的Paint事件编写处理程序。在处理程序中,可以使用Graphics对象的绘图方法绘制网格。 首先,创建一个Graphics对象,可以使用PictureBox控件的CreateGraphics方法来获取Graphics对象。然后,使用Graphics对象的绘图方法绘制网格。例如,可以使用Graphics对象的DrawLine方法绘制水平和垂直线条,并指定线条的起始点和结束点。 绘制水平线条时,可以使用PictureBox控件的Height属性作为线条的y坐标,然后使用循环语句绘制多条水平线条,间距为网格的大小。 绘制垂直线条时,可以使用PictureBox控件的Width属性作为线条的x坐标,然后使用循环语句绘制多条垂直线条,间距为网格的大小。 绘制完所有线条后,可以使用PictureBox控件的Invalidate方法强制重绘,以显示绘制的网格。 最后,在WinForm的Load事件中调用PictureBox控件的Invalidate方法,以触发Paint事件,开始绘制网格。 绘制网格图片的整个过程就是这样。通过使用PictureBox控件的Paint事件和Graphics对象的绘图方法,可以在WinForm绘制出网格图片。 ### 回答2: 在WinForms中绘制网格图片是相对简单的任务。首先,我们需要创建一个新的WinForms项目,并在窗体中添加一个PictureBox控件。 我们可以在窗体的Paint事件中获取PictureBox控件的Graphics对象,然后使用Graphics对象的DrawLine方法来绘制网格。以下是一个示例代码: ``` private void pictureBox1_Paint(object sender, PaintEventArgs e) { // 获取PictureBox的Graphics对象 Graphics g = e.Graphics; // 定义网格线的间隔距离 int interval = 40; // 绘制垂直线 for (int x = interval; x < pictureBox1.Width; x += interval) { g.DrawLine(Pens.Black, x, 0, x, pictureBox1.Height); } // 绘制水平线 for (int y = interval; y < pictureBox1.Height; y += interval) { g.DrawLine(Pens.Black, 0, y, pictureBox1.Width, y); } } ``` 在这个示例中,我们使用一个间隔值来确定网格线的间距,并使用循环来绘制垂直和水平线。我们使用了Pens.Black来指定绘制线条的颜色。 在窗体加载时,我们还需要将PictureBox控件的SizeMode属性设置为StretchImage,以使网格图片在控件中自适应,代码如下: ``` public Form1() { InitializeComponent(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; } ``` 最后,我们可以在运行程序时看到网格图片出现在PictureBox控件中。我们可以根据需要调整间距值和线条颜色,以创建我们想要的网格样式。 希望这个简单的示例对你有所帮助! ### 回答3: 在WinFrom绘制网格图片有多种方法。一种常见的方法是使用PictureBox控件和绘图函数来实现。 首先,在WinFrom窗体中添加一个PictureBox控件,并将其大小设置为所需的网格大小。然后,我们可以在PictureBox的Paint事件中进行绘图操作。 在绘图操作过程中,我们可以使用GDI+绘图函数来绘制网格线。例如,可以使用Graphics对象的DrawLine方法来绘制水平和垂直的网格线。 具体实现时,可以在Paint事件中创建Graphics对象,并设置网格线的颜色和粗细。然后,使用循环语句在PictureBox上绘制水平和垂直的网格线。例如,可以使用两层嵌套的循环分别绘制水平和垂直的网格线。 在循环中,可以使用DrawLine方法绘制水平的网格线,起始点的X坐标为0,Y坐标为当前循环变量的值,而结束点的X坐标为PictureBox的宽度,Y坐标同样为当前循环变量的值。 类似地,可以使用DrawLine方法绘制垂直的网格线,起始点的X坐标为当前循环变量的值,Y坐标为0,而结束点的X坐标同样为当前循环变量的值,Y坐标为PictureBox的高度。 最后,在主窗体的Load事件中调用PictureBox的Invalidate方法,以触发Paint事件,即可在PictureBox中绘制出网格图片。 总之,以上是一种在WinFrom绘制网格图片的方法。当然,还有其他的实现方式,具体可以根据需求和个人喜好进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值