亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

智能可變大小的控件:一個控件制作的全過程(C#)

2019-11-17 04:10:43
字體:
來源:轉載
供稿:網友

第一步:
確定這個控件需要用來做什么的,我們想對這個控件進行什么樣的操作,這個控件需要什么屬性;
第二步:
明確我們要做的控件之后就要開始進行實質性的技術攻關了,就是你要定義好各種要做的方法,明確這些方法是否是技術可及的;
第三步:
方法實現階段,將原先已經解決的技術關鍵點和應處理的各個小范圍處理應用到整個工程;
以下我做的一個控件的代碼:
///
///此控件達到的功能是可以隨意控制控件的大小,所在容器的位置,并且此控件實現了
///在鼠標放上去的時候能夠自動變大(需要改變大小可以自己再添加屬性,本控件默認長寬增長30個像素),并且會產生標簽顯示控件的信息(可控)
///在鼠標離開后會自動變回原來默認的大小,并有畫字畫圖功能(這部分是根據傳入有限集合進行智能繪畫功能,出入集合自行解決,本控件將其省略)
///
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace AnalysisSystem.Object
{
    public partial class DeviceControl : UserControl
    {
        #region 定義各種屬性  

        PRivate bool _showToolTip;//默認false
        private bool _InControl;//鼠標是否放在控件上的標志位

        //設置窗口的大小
        private Size _SetSize;

        public Size SetSize
        {
            get { return _SetSize; }
            set { _SetSize = value; }
        }
        //將此控件放入容器的大小
        private Point _ContainerSize;

        public Point ContainerSize
        {
            get { return _ContainerSize; }
            set { _ContainerSize = value; }
        }
       
        //設置控件在容器中的位置
        private Point _showLocation;

        public Point ShowLocation
        {
            get { return _showLocation; }
            set { _showLocation = value; }
        }

        //傳入控制屬性類(有限集合,省略)
...........................................

        #endregion

        public DeviceControl()
        {
            InitializeComponent();
            //透明設置(在本控件中由于使用了g.clear()方法而失效,可用畫布疊加解決,暫未實現)
            SetStyle(ControlStyles.SupportsTransparentBackColor
                | ControlStyles.UserPaint
                | ControlStyles.AllPaintingInWmPaint
                | ControlStyles.Opaque, true);
            BackColor = Color.Transparent;
          

        }

        #region 定義一些執行函數中需要用到的方法

        //生成信息標簽
        private ToolTip Get_Tooltip(string Title)
        {
            ToolTip Node_Box = new ToolTip();
            Node_Box.AutoPopDelay = 5000;
            Node_Box.InitialDelay = 100;
            Node_Box.ReshowDelay = 300;
            Node_Box.ShowAlways = true;
            Node_Box.IsBalloon = true;
            Node_Box.OwnerDraw = true;
            Node_Box.ToolTipIcon = ToolTipIcon.Info;
            Node_Box.ToolTipTitle = Title;
            Node_Box.UseFading = true;
            return Node_Box;
        }
        //產生三角形的各個點
        private PointF[] GetTrianglePointF()
        {
            PointF point1 = new PointF(ClientSize.Width / 2, 0.0F);
            PointF point2 = new PointF(0.0F, ClientSize.Height);
            PointF point3 = new PointF(ClientSize.Width, ClientSize.Height);
            PointF[] curvePoints =
             {
                 point1,
                 point2,
                 point3,
             };
            return curvePoints;
        }
        //產生多邊形的各個點
        private PointF[] GetPolygonPointF()
        {
            PointF point1 = new PointF(ClientSize.Width / 2, 0.0F);
            PointF point2 = new PointF(0.0F, ClientSize.Height / 3);
            PointF point3 = new PointF(ClientSize.Width / 4, ClientSize.Height);
            PointF point4 = new PointF(ClientSize.Width / 5 + ClientSize.Width / 5 + ClientSize.Width / 5 + ClientSize.Width / 5, ClientSize.Height);
            PointF point5 = new PointF(ClientSize.Width, ClientSize.Height / 3);
            PointF[] curvePoints =
             {
                 point1,
                 point2,
                 point3,
                 point4,
                 point5
             };
            return curvePoints;
        }
        /// <summary>
        /// 畫字
        /// </summary>
        /// <param name="g">圖對象</param>
        /// <param name="Word">要畫的字符串</param>
        /// <returns>畫好的圖對象</returns>

        private Graphics DrawWord(Graphics g, string Word)
        {
            // Create font and brush.
            Font drawFont = new Font("Arial", 8);
            SolidBrush drawBrush = new SolidBrush(Color.Black);

            // Create point for upper-left corner of drawing.
            float x = 0.0F;
            float y = ClientSize.Height / 2;

            // Draw string to screen.
            g.DrawString(Word, drawFont, drawBrush, x, y);//往控件里面寫字
            return g;
        }
        #endregion


        #region 控件使用到的一些消息響應方法

        private void DeviceControl_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen mypen = new Pen(Color.Black, 2);

            g.Clear(Color.White);//將背景清除并且填充白色
            //g.DrawImage(this.BackgroundImage, 0, 0, this.Width, this.Height);

            //依照不同的屬性類(集合)畫不同的圖案
...................................................................................


            // 圖像變大超出容器范圍則必須對其位置進行調整
            if (this._ContainerSize != null)//如果有設置此控件放入的容器大小
            {
                if ((base.Left + this.ClientSize.Width) > this._ContainerSize.X)//超出右邊邊界
                {
                    base.Left = this._ContainerSize.X - this.ClientSize.Width - 10;
                }
                else
                {
                    if (base.Left != _showLocation.X && !this._InControl)
                        base.Left = _showLocation.X;
                }
                if ((base.Top + this.ClientSize.Height) > this._ContainerSize.Y)//超出下邊邊界
                {
                    base.Top = this._ContainerSize.Y - this.ClientSize.Height - 10;
                }
                else
                {
                    if (base.Top != _showLocation.Y && !this._InControl)
                        base.Top = _showLocation.Y;
                }
            }
        }
        //鼠標放到控件上面時要做的動作
        private void DeviceControl_MouseHover(object sender, EventArgs e)
        {
            if (!_showToolTip)
            {
                ToolTip t = this.Get_Tooltip(...);
                 string info="";//標簽要顯示的內容
                t.SetToolTip(this, info);//this即是綁定到本身
                this._showToolTip = true;
            }
            this.Invalidate();//清除已畫的畫布上的圖形
            this.Size = new System.Drawing.Size(_SetSize.Width + 30, _SetSize.Height + 30);//重繪控件的大小,默認是擴大30個像素
            this._InControl = true;


        }      
        //鼠標移開時要做的動作
        private void DeviceControl_MouseLeave(object sender, EventArgs e)
        {
            this.Invalidate();//清除已畫的畫布上的圖形
            this.Size = new System.Drawing.Size(_SetSize.Width , _SetSize.Height );//重繪控件的大小
            this._InControl = false;
        }
        #endregion
    }
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品网站大全| 亚洲 日韩 国产第一| 最近2019中文字幕mv免费看| 成人乱人伦精品视频在线观看| 国产精品igao视频| 国产日韩综合一区二区性色av| 久久精品久久久久久国产 免费| 亚洲第一精品夜夜躁人人爽| 国产一区二区三区在线| 精品一区二区三区四区在线| 欧美成人免费播放| 亚洲人成电影在线播放| 亚洲激情中文字幕| 国产成人亚洲综合| 91精品久久久久久久久久入口| 亚洲自拍偷拍第一页| 日韩中文字幕av| 色伦专区97中文字幕| 亚洲大胆美女视频| 国产一区二区三区在线看| 成人精品视频99在线观看免费| 秋霞av国产精品一区| 91免费在线视频| 亚洲男人av电影| 日韩h在线观看| 国产精品一香蕉国产线看观看| 久久综合色影院| 色噜噜狠狠色综合网图区| 国产一区二区三区三区在线观看| 亚洲色图激情小说| 亚洲精品久久久久国产| 5252色成人免费视频| 夜夜嗨av色一区二区不卡| 久久综合国产精品台湾中文娱乐网| 亚洲国产成人精品一区二区| 一区二区三区精品99久久| 欧美插天视频在线播放| 性金发美女69hd大尺寸| 亚洲成人黄色在线| 日韩av中文在线| 亚洲人成亚洲人成在线观看| 国产精品美女久久久久av超清| 美日韩精品免费视频| 日韩福利伦理影院免费| 久久精品国产69国产精品亚洲| 国产欧美日韩91| 久久99亚洲精品| 国产ts一区二区| 国模私拍一区二区三区| 精品视频在线观看日韩| 亚洲资源在线看| 日本人成精品视频在线| 欧美在线视频播放| 欧美成在线视频| 日韩av片电影专区| 欧美又大又粗又长| 亚洲黄色av女优在线观看| 亚洲精品黄网在线观看| 4438全国亚洲精品在线观看视频| 国产亚洲精品美女| 国产不卡av在线免费观看| 欧洲s码亚洲m码精品一区| 日韩欧美精品在线观看| 国产精品视频色| 91影视免费在线观看| 中文字幕欧美在线| 国模精品系列视频| 78色国产精品| 日韩中文字幕在线视频播放| 5566日本婷婷色中文字幕97| 欧美国产极速在线| 亚洲激情小视频| 国产精品嫩草影院久久久| 精品福利在线视频| 亚洲精美色品网站| 欧美视频在线视频| 国产小视频国产精品| 亚洲精品丝袜日韩| 欧美中文字幕在线视频| 欧美午夜www高清视频| 国产一区二区免费| 91网站免费观看| 欧美国产极速在线| 日韩国产欧美区| 久久综合国产精品台湾中文娱乐网| 日韩亚洲欧美中文在线| 亚洲综合在线中文字幕| 亚洲欧美国内爽妇网| 国产精品69久久久久| 久久久人成影片一区二区三区观看| 一区二区三区动漫| 欧美激情免费观看| 国产精品激情av电影在线观看| 欧美日韩福利在线观看| 欧美性jizz18性欧美| 91av视频在线播放| 国产精品免费视频久久久| 欧美日韩国产综合视频在线观看中文| 国产精品自产拍在线观| 国产免费久久av| 日韩激情av在线免费观看| 国产精品扒开腿爽爽爽视频| 亚洲一区二区中文字幕| 中文字幕成人精品久久不卡| 97人人模人人爽人人喊中文字| 亚洲男人第一av网站| 日韩一级黄色av| 91丝袜美腿美女视频网站| 在线亚洲欧美视频| 在线性视频日韩欧美| 国产成人avxxxxx在线看| 中文字幕久热精品在线视频| 国产亚洲a∨片在线观看| 草民午夜欧美限制a级福利片| 久久久av免费| 欧美视频在线观看免费网址| 亚洲一区亚洲二区亚洲三区| 性夜试看影院91社区| 九九久久国产精品| 高清亚洲成在人网站天堂| 久久天天躁夜夜躁狠狠躁2022| 亚洲精品视频在线播放| 国产精品视频yy9099| 国产在线拍偷自揄拍精品| 91视频免费在线| 日韩电影大片中文字幕| 日韩欧美在线免费观看| 精品久久香蕉国产线看观看gif| 九九热最新视频//这里只有精品| 亚洲欧美国产精品专区久久| 91九色国产视频| 91av视频在线| 欧美有码在线观看视频| 热草久综合在线| 中文字幕日韩欧美在线视频| 欧美人交a欧美精品| 久久成人在线视频| 亚洲老头同性xxxxx| 国产成人97精品免费看片| 久久av红桃一区二区小说| 精品日韩视频在线观看| 亚洲午夜激情免费视频| 亚洲精品在线观看www| 久久影院资源站| 精品一区精品二区| 国产91精品青草社区| 91国产精品视频在线| 最近2019中文字幕一页二页| 91香蕉嫩草神马影院在线观看| 欧美中文字幕第一页| 亚洲日本aⅴ片在线观看香蕉| 欧美成人黄色小视频| 国产精品国语对白| 亚洲电影免费观看高清完整版在线| 亚洲美女www午夜| 亚洲精品一区二三区不卡| 91av在线播放| 8050国产精品久久久久久| 国外日韩电影在线观看| 欧美日韩国产精品一区二区不卡中文| 在线观看欧美www| 亚洲欧美激情四射在线日| 亚洲大胆人体av| 国产在线观看91精品一区|