zoukankan      html  css  js  c++  java
  • 超级简单的分屏控件【自定义PictureBox 继承于UserControl】

      暑假前的一段时间,老师让做一个基于Socket的监控系统,其中有一项要求是可以分屏同时查看多台C的屏幕画面,由于基础不好,写这个分屏的控件也想了半天,不过总算是弄出来了,嘿嘿…

    public partial class PictureControl : UserControl
        {
            public event MouseEventHandler PicControl_DoubleClick;
           
            private int picNum;
            /// <summary>
            /// 屏幕个数
            /// </summary>
            public int PicNum
            {
                get { return picNum; }
                set
                {
                    if (value == 4 || value == 6 || value == 9 || value == 12 || value == 16 || value == 20 || value == 25)//只能

    是4、6、9、12、16、20、25
                    {
                        picNum = value;
                        this.SetPictureBox(this.picNum);
                    }
                    else
                    {
                        this.PicNum = 12;
                        this.SetPictureBox(this.picNum);
                    }
                }
            }

            public PictureControl()
            {
                this.picNum = 4;
                InitializeComponent();
                this.SetPictureBox(this.picNum);
            }

            /// <summary>
            /// 根据个数布局PictureBox
            /// </summary>
            /// <param name="num"></param>
            private void SetPictureBox(int num)
            {
                this.Controls.Clear();
                Size size = this.Size;
                switch (num)
                {
                    case 4: this.SetPictureBox(2, 2, size); break;
                    case 6: this.SetPictureBox(2, 3, size); break;
                    case 9: this.SetPictureBox(3, 3, size); break;
                    case 12: this.SetPictureBox(3, 4, size); break;
                    case 16: this.SetPictureBox(4, 4, size); break;
                    case 20: this.SetPictureBox(4, 5, size); break;
                    case 25: this.SetPictureBox(5, 5, size); break;
                }
            }

            /// <summary>
            /// 布局pictureBox
            /// </summary>
            /// <param name="x">几行</param>
            /// <param name="y">几列</param>
            /// <param name="size">当前控件的大小</param>
            private void SetPictureBox(int x, int y,Size size)
            {
                int num = 0;
                for (int i = 0; i < x; i++)
                {
                    for (int j = 0; j < y; j++)
                    {
                        PictureBox pic = new PictureBox();
                        pic.SizeMode = PictureBoxSizeMode.Zoom;                                         //设置自动缩放
                        pic.BackColor = Color.White;                                                    //设置背景颜色
                        pic.Location = new Point((size.Width / y) * j, (size.Height / x) * i);          //设置Location
                        pic.BorderStyle = BorderStyle.FixedSingle;                                      //设置边框
                        pic.MouseDoubleClick += new MouseEventHandler(pic_MouseDoubleClick);            //订阅控件双击事件
                        pic.Size = new Size(size.Width / y, size.Height / x);                           //设置控件大小    
                        pic.Tag = num;                                                                  //设定控件编号即屏幕序号
                        this.Controls.Add(pic);                                                         //添加
                        num++;
                    }
                }
            }

            void pic_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                if (this.PicControl_DoubleClick != null)
                {
                    this.PicControl_DoubleClick(sender, e);//将动态添加的控件的双击事件 传向控件体外。
                }
            }

            private void PictureControl_SizeChanged(object sender, EventArgs e)
            {
                this.SetPictureBox(this.picNum);
            }

            private PictureBox GetPicByIndex(int index)
            {
                foreach (Control c in this.Controls)
                {
                    if (Convert.ToInt32(c.Tag) == index)
                    {
                        return (PictureBox)c;
                    }
                }
                PictureBox p = new PictureBox();
                p.Tag = -1;
                return p;
            }

            /// <summary>
            /// 根据屏幕序号设置图像
            /// </summary>
            /// <param name="index">屏幕号</param>
            /// <param name="img">图像</param>
            public void SetImageByIndex(int index, Image img)
            {
                GetPicByIndex(index).Image = img;
            }
        }



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    HUSTOJ搭建后为了方便作为Judger调用进行的一些修改操作
    [转]我国古代求解最大公约数的方法-更相减损术
    [转]nodejs导出word
    Java抓取Codeforces——针对某一次提交的源码和数据
    Java以UTF-8格式读写及追加写文件示例
    C++使用fill初始化二维数组
    FNV hash算法
    vitess基础镜像构建流程Centos
    go 工具链目前[不支持编译 windows 下的动态链接库]解决方案
    binlog分析方法
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1784550.html
Copyright © 2011-2022 走看看