C# winfrom 自定义控件圆角

 public partial class ChartUser : UserControl
    {
        public ChartUser()
        {
            InitializeComponent(); Niuibi(); Round(this.Region);
        }
        private int _Radius = 20;  // 圆角弧度

        /// <summary>圆角弧度(0为不要圆角)</summary>
        [Browsable(true)]
        [Description("圆角弧度(0为不要圆角)")]
        public int Radius
        {
            get
            {
                return _Radius;
            }
            set
            {
                if (value < 0) { _Radius = 0; }
                else { _Radius = value; }
                base.Refresh();
            }
        }
        //protected override void OnPaint(PaintEventArgs pe)
        //{
           // Round(this.Region);
        //}

        public void Round(System.Drawing.Region region)
        {
            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 void LoadClents(List<TcpModel> Clientlist)
        {
            this.Invoke(new Action(() =>
            {
                var CountAll = Clientlist.Count();
                var OnCount = Clientlist.Where(n => n.Status == true).Count();
                var OffCount = Clientlist.Where(n => n.Status == false).Count();
                label4.Text = CountAll.ToString();
                label5.Text = OnCount.ToString();
                label6.Text = OffCount.ToString(); 
                DataTable dt = PrepareData(Clientlist);
                chart1.Series[0].Points.DataBind(dt.DefaultView, "subject", "score", "LegendText=subject,YValues=score,ToolTip=subject");
                chart1.Series[0].LabelAngle = 0;
                chart1.DataBind();
                chart1.BringToFront();
            }));

        }
        public void Niuibi()
        {
            chart1.Series.Clear();
            //ChartHelper.SetTitle(chart1, "大圆机设备统计", new System.Drawing.Font("微软雅黑", 24F), Docking.Top, Color.Red);
            ChartHelper.AddSeries(chart1, "饼状图", SeriesChartType.Doughnut, Color.Lime, Color.Red, true);
            ChartHelper.SetStyle(chart1, Color.Transparent, Color.White);
            ChartHelper.SetLegend(chart1, Docking.Right, StringAlignment.Near, Color.Transparent, Color.Black); 
            //chart1.Series[0].Points.DataBindXY(xData1, yData1); 
        }
        public DataTable PrepareData(List<TcpModel> Clientlist)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("subject", typeof(string));
            dt.Columns.Add("score", typeof(float));
            var OnCount = Clientlist.Where(n => n.Status == true).Count();
            var OffCount = Clientlist.Where(n => n.Status == false).Count();
            dt.Rows.Add("在线设备", OnCount.ToString());
            dt.Rows.Add("离线设备", OffCount.ToString());
            return dt;
        }

    }

猜你喜欢

转载自blog.csdn.net/qq_38341160/article/details/116594974