快速自定义Region的解决方法

本文介绍了在.NET中快速自定义控件形状(Region)的方法。通常使用Drawing2D.GraphicsPath的相关方法绘制复杂Region较难,作者提出先将Region画成图片设为Form背景,通过记录鼠标单击点构造Point(),最后用AddPolygon方法完成自定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速自定义Region的解决方法

作者:wgscd(自由奔腾)

(转载请注明作者和出处)

        .net为们提供了简单方便自定义控件形状(Region)的方法,不管是Form,Button,Label等,我们都可以通过改变Region属性达到自定义形状的目的,.NET 的GDI+功能强大是有目共睹的!画各种图形的方法就不用我说了,我的目标是快速实现一个自定意的Region,通常我们的方法是Drawing2D.GraphicsPath的AddRectangle,AddPolygon,AddLine之类的,但是当我们想画一个很复杂的Region时候(比如画一个人体是造型)这些简单的方法使用起来就难。  我  正在做一个播放器,想将界面加上个人体的形状,我开始是用AddPolygon的方法计算各Point(x,y),可想而知,多么的费力!中午我在食堂吃饭了(许多事情都是在不经意间闪现的吧),哈哈,忽然想到了,原来方法如下:

         我一说大家就明白了,原理:在From的先将你要画的Rrgion画成图片,在将Form的背景设置为此图片

加一个RichTextBox1,一个TextBox

  Dim x, y As String

   Dim i As Integer '用于记录Point数

 Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove


        Me.TextBox1.Text = e.X & "," & e.Y


    End Sub

 Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp


        If e.Button = MouseButtons.Right Then


            Me.RichTextBox1.Text = x & "Point 数" & i

        End If

    End Sub
    Dim i As Integer
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown

        If e.Button =MouseButtons.Left Then

            l = True
            Dim c As Graphics = Me.CreateGraphics
            c.DrawLine(New Pen(Color.Red), e.X, e.Y, e.X - 1, e.Y - 1)

            c.SmoothingMode = SmoothingMode.HighQuality
            x &= "new Point(" & e.X & "," & e.Y & "),"

            i += 1

        End If


    End Sub

现在你应该看懂这样的目的了吧!也就是记录鼠标单击的点,因为我们需要这些点来构造我们的Point(),不规则的Region当然一般用Drawing2D.GraphicsPath的AddPolygon方法,于是我们要Point()。

而现在这些Point都有了,最后就是将TextBox1的内容复制来构造我们的Point()

例如:

 Dim p As New Drawing2D.GraphicsPath
      
        Dim pf As Point() = New Point() {New Point(60, 6), New Point(67, 1), New Point(105, 6), New Point(107, 13), New Point(111, 25), New Point(111, 32), New Point(112, 42), New Point(109, 46), New Point(108, 55), New Point(108, 70), New Point(111, 83), New Point(112, 89), New Point(119, 96), New Point(122, 102), New Point(118, 112), New Point(118, 118), New Point(124, 128), New Point(128, 137), New Point(128, 152), New Point(119, 166), New Point(113, 176), New Point(116, 194), New Point(120, 203), New Point(126, 212), New Point(129, 216), New Point(129, 16), New Point(135, 12), New Point(297, 12), New Point(304, 7), New Point(445, 7), New Point(454, 14), New Point(467, 20), New Point(475, 20), New Point(483, 12), New Point(650, 11), New Point(650, 336), New Point(485, 336), New Point(477, 327), New Point(473, 327), New Point(466, 336), New Point(206, 336), New Point(187, 323), New Point(180, 324), New Point(164, 330), New Point(152, 330), New Point(141, 326), New Point(135, 322), New Point(128, 314), New Point(129, 311), New Point(125, 325), New Point(120, 337), New Point(107, 338), New Point(70, 335), New Point(49, 304), New Point(37, 302), New Point(20, 287), New Point(26, 265), New Point(21, 249), New Point(14, 234), New Point(8, 218), New Point(4, 203), New Point(2, 193), New Point(3, 181), New Point(7, 158), New Point(15, 125), New Point(21, 103), New Point(25, 94), New Point(37, 86), New Point(47, 81), New Point(51, 71), New Point(53, 59), New Point(52, 45), New Point(54, 33), New Point(56, 18), New Point(59, 6), New Point(34, 147), New Point(27, 168), New Point(22, 185), New Point(25, 208), New Point(30, 233), New Point(34, 251), New Point(35, 240), New Point(38, 226), New Point(41, 210), New Point(43, 198), New Point(42, 182), New Point(38, 169), New Point(36, 156), New Point(35, 148)} 'Point 数75

  p.AddPolygon(pf)

       
        Me.Region = New Region(p)

完成

效果如下:

http://blog.youkuaiyun.com/images/blog_youkuaiyun.com/wgsnet/97899/r_region.JPG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值