winfrom 圆角panel

首先后台添加命名空间

using System.Drawing.Drawing2D;

后台代码

namespace Report.Web
{
    public partial class RoundPanel : Panel
    {
        private int mMatrixRound = 8;//圆角大小默认值
        private Color mBack;
        //重新定义背景颜色
        public Color Back
        {
            get { return mBack; }
            set
            {
                if (value == null)
                {
                    mBack = Control.DefaultBackColor;
                }
                else
                {
                    mBack = value;
                }
                base.Refresh();
            }
        }
        /// <summary>圆角弧度(0为不要圆角)</summary>
         [Browsable(true)]          //显示到属性栏
         [Description("圆角弧度(0为不要圆角)")]//属性栏 显示的注释
        public int MatrixRound
        {
            get { return mMatrixRound; }
            set
            {
                mMatrixRound = value;
                base.Refresh();
            }
        }

        private GraphicsPath CreateRound(Rectangle rect, int radius)
        {
            GraphicsPath roundRect = new GraphicsPath();
            //顶端
            roundRect.AddLine(rect.Left + radius - 1, rect.Top - 1, rect.Right - radius, rect.Top - 1);
            //右上角
            roundRect.AddArc(rect.Right - radius, rect.Top - 1, radius, radius, 270, 90);
            //右边
            roundRect.AddLine(rect.Right, rect.Top + radius, rect.Right, rect.Bottom - radius);
            //右下角

            roundRect.AddArc(rect.Right - radius, rect.Bottom - radius, radius, radius, 0, 90);
            //底边
            roundRect.AddLine(rect.Right - radius, rect.Bottom, rect.Left + radius, rect.Bottom);
            //左下角
            roundRect.AddArc(rect.Left - 1, rect.Bottom - radius, radius, radius, 90, 90);
            //左边
            roundRect.AddLine(rect.Left - 1, rect.Top + radius, rect.Left - 1, rect.Bottom - radius);
            //左上角
            roundRect.AddArc(rect.Left - 1, rect.Top - 1, radius, radius, 180, 90);
            return roundRect;
        } 

        protected override void OnPaint(PaintEventArgs pe)
        {
            int width = base.Width - base.Margin.Left - base.Margin.Right;
            int height = base.Height - base.Margin.Top - base.Margin.Bottom;
            Rectangle rec = new Rectangle(base.Margin.Left, base.Margin.Top, width, height);
            GraphicsPath round = CreateRound(rec, mMatrixRound);
            pe.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
            pe.Graphics.FillPath((Brush)(new SolidBrush(mBack)), round);
        }
        protected override void OnResize(EventArgs eventargs)
        {
            base.Refresh();
        }
    }
}

注:以上信息我也是通过查资料然后总结的。

winfrom 圆角panel,布布扣,bubuko.com

时间: 2024-10-24 02:23:07

winfrom 圆角panel的相关文章

用Delphi画圆角Panel的方法(使用CreateRoundRectRgn创造区域,SetWindowRgn显示指定区域)

用Delphi画圆角Panel的方法: procedure TForm1.Button5Click(Sender: TObject);var fhr :Thandle;beginfhr:=CreateRoundRectRgn(0,0,panel1.width,panel1.height,4,4);SetWindowRgn(panel1.handle,fhr,true);end; Panel的BevelInner 及 BevelOuter 最好设成 bvNone http://blog.csdn.

用Delphi画圆角Panel的方法

procedure TForm1.Button5Click(Sender: TObject);var fhr :Thandle;beginfhr:=createroundrectrgn(0,0,panel1.width,panel1.height,4,4);setwindowrgn(panel1.handle,fhr,true);end; Panel的BevelInner 及 BevelOuter 最好设成 bvNone

winfrom中将panel另存为图片

private void button1_Click(object sender, EventArgs e)        {            Point ScrollMaxInfo = GetScrollPoint(panel1);            Size ControlMaxSize = GetControlSize(panel1, ScrollMaxInfo); Bitmap ControlImage = new Bitmap(ControlMaxSize.Width, Co

Panel扩展 圆角边框,弧形边框

using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms; namespace LC.Component { public class cpPanel : Syste

【控件扩展】带圆角、边框、渐变的panel

下载地址:  http://files.cnblogs.com/chengulv/custompanel_demo.zip using System; namespace LC.Fun { /// <summary>Panel扩展 带圆角,颜色渐变</summary> [System.Drawing.ToolboxBitmapAttribute(typeof(System.Windows.Forms.Panel))] public class RoundPanel : System

Winfrom Panel Scroll End 的实现

场景:在一个panel里面有非常多的自定义绘制的控件,在拖拉滚动条的时候,控件的画面上有残影 不知道大家遇到过这种情况没,一直做web的winform经验太少,有更好的解决办法请贡献 首先放出我的解决思路:需要再滚动停止的时候重绘一下控件,panel的所有事件都加了一个打印输出,发现,滚动条在滚动的时候只有一个Scrol事件,是在滚动时候产生的,问题在于轻轻拖动滚动条,就会一瞬间产生N个Scrol,如果直接这个事件里面放重绘代码,太消耗资源,第二这个滚动条除了滚动事件,别的事件都没有,比如鼠标m

winfrom获取用户控件里的控件对象

如何获取用户控件里的控件对象呢,其实思路也是很简单的, 比如有一个panel 用户控件 里面有许多的其他控件. 那么要找出一个Label控件怎么找呢,好的.现在我们就开始 首先,一个foreach循环获得所有控件. 然后根据类型筛选出这个类型的所有控件.然后就可以用Name来判断了 foreach(var lb in mi_image1.Controls) {    if (lb is Label)    {         Label obj = lb as Label;   //如果把循环改

winfrom程序文本框第一次选中问题

想实现这样的功能: 就是在panel中的文本框,当第一次点击文本框时,全选文本框的内容:再次选择时,可以全选,也可以部分选中, 可是文本框总是从左全部选中,还不能从右边选择,在Enter或Down事件里写,也没有实现这样的效果 有看到过这样的写法: BeginInvoke((Action)delegate            {                Textbox1.SelectAll();            }); 这样就很完美的实现了上面的效果 ---做笔记 winfrom程

Qt圆角功能和状态组合按钮,可以显示颜色或者图片

使用两个按钮和一个Label封装了一个功能和状态圆角组合按钮,Label用来显示颜色或者图片. 实现的效果如下: 显示图片: 显示红色: 其中颜色或者图片是通过函数设置进去的. 两个按钮:前一个是状态按钮,可以Check,表示使用此项功能:后一个按钮是功能按钮,可以Check,表示跳转到此功能对应的选项.两个按钮都有信号,可以通过信号进行连接你需要的槽函数. 具体实现代码: #include <QPushButton> #include <QLabel> class QStateF