zoukankan      html  css  js  c++  java
  • [C#] 用户自定义控件(含源代码)圆角Panel

    圆角Panel代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;

    namespace myControlLibrary
    {
    public partial class RoundPanel : System.Windows.Forms.Panel
    {
    public RoundPanel()
    {
    InitializeComponent();

    this.Padding = new System.Windows.Forms.Padding(0, 0, 0, 0);
    this.Margin = new System.Windows.Forms.Padding(0, 0, 0, 0);
    this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
    }


    // 圆角
    // ===============================================================================================
    private int _Radius; // 圆角弧度

    /// <summary>圆角弧度(0为不要圆角)</summary>
    [Browsable(true)]
    [Description(
    "圆角弧度(0为不要圆角)")]
    public int _setRoundRadius
    {
    get
    {
    return _Radius;
    }
    set
    {
    if (value < 0) { _Radius = 0; }
    else { _Radius = value; }
    base.Refresh();
    }
    }


    // 圆角代码
    public void Round(System.Drawing.Region region)
    {
    // -----------------------------------------------------------------------------------------------
    // 已经是.net提供给我们的最容易的改窗体的属性了(以前要自己调API)
    System.Drawing.Drawing2D.GraphicsPath oPath = new System.Drawing.Drawing2D.GraphicsPath();
    int x = 0;
    int y = 0;
    int thisWidth = this.Width;
    int thisHeight = this.Height;
    int angle = _Radius;
    if (angle > 0)
    {
    System.Drawing.Graphics g
    = CreateGraphics();
    oPath.AddArc(x, y, angle, angle,
    180, 90); // 左上角
    oPath.AddArc(thisWidth - angle, y, angle, angle, 270, 90); // 右上角
    oPath.AddArc(thisWidth - angle, thisHeight - angle, angle, angle, 0, 90); // 右下角
    oPath.AddArc(x, thisHeight - angle, angle, angle, 90, 90); // 左下角
    oPath.CloseAllFigures();
    Region
    = new System.Drawing.Region(oPath);
    }
    // -----------------------------------------------------------------------------------------------
    else
    {
    oPath.AddLine(x
    + angle, y, thisWidth - angle, y); // 顶端
    oPath.AddLine(thisWidth, y + angle, thisWidth, thisHeight - angle); // 右边
    oPath.AddLine(thisWidth - angle, thisHeight, x + angle, thisHeight); // 底边
    oPath.AddLine(x, y + angle, x, thisHeight - angle); // 左边
    oPath.CloseAllFigures();
    Region
    = new System.Drawing.Region(oPath);
    }
    }
    // ===============================================================================================


    public RoundPanel(IContainer container)
    {
    container.Add(
    this);

    InitializeComponent();
    }

    protected override void OnPaint(System.Windows.Forms.PaintEventArgs pe)
    {
    base.OnPaint(pe);
    Round(
    this.Region); // 圆角
    }

    protected override void OnResize(EventArgs eventargs)
    {
    base.OnResize(eventargs);
    base.Refresh();
    }
    }
    }
  • 相关阅读:
    工厂增强
    面试题
    SpringBean生命周期及作用域
    字符串
    带参数方法实例
    带参数方法
    人机猜拳
    类的无参方法
    类和对象实例2
    类和对象实例1
  • 原文地址:https://www.cnblogs.com/hcbin/p/1685041.html
Copyright © 2011-2022 走看看