• C#分屏控件用法实例


    本文实例中的自定义类PictureBox继承于UserControl,最终实现简单的分屏功能。分享给大家供大家参考之用。具体实现代码如下:

    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、6912162025
            {
              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;
        }
    }
  • 相关阅读:
    软件开发模式
    my parnter code review
    官僚模式和功能团队模式的优缺点
    思考题
    my code review
    四则运算
    Android Studio下使用Junit框架测试数组和
    SQL2008 存储过程 增删改查例子
    NET 无法显示XML页怎么办
    vs2010 2005 2008 代码前面出现··········取消方法
  • 原文地址:https://www.cnblogs.com/rinack/p/4260105.html
Copyright © 2020-2023  润新知