C#分屏控件用法实例

作者:shichen2014 时间:2022-02-04 20:01:57 

本文实例中的自定义类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、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;
   }
}

希望本文所述实例对大家C#程序设计有所帮助。

标签:C#,分屏,控件,用法
0
投稿

猜你喜欢

  • Java泛型之类型擦除实例详解

    2022-02-13 06:39:36
  • IDEA中的.iml文件和.idea文件夹

    2023-11-23 11:47:19
  • java 使用idea将工程打成jar并创建成exe文件类型执行的方法详解

    2022-12-07 02:49:30
  • Mybatis中的延迟加载案例解析

    2023-02-27 01:55:37
  • java 如何远程控制tomcat启动关机

    2023-04-10 03:21:47
  • Java单例模式实现静态内部类方法示例

    2021-08-03 00:36:51
  • SpringBoot集成POI实现Excel导入导出的示例详解

    2022-12-05 19:09:10
  • 线程池中execute与submit的区别说明

    2023-03-18 23:09:04
  • SpringBoot文件上传大小设置方式(yml中配置)

    2021-09-21 09:26:47
  • 详解C#对XML、JSON等格式的解析

    2022-06-04 22:45:50
  • javascript 在线文本编辑器实现代码

    2023-11-24 23:07:24
  • 简单谈谈java中匿名内部类构造函数

    2021-09-08 18:54:10
  • Android Flutter实现搜索的三种方式详解

    2023-07-10 18:00:49
  • SpringBoot的@Value给静态变量注入application.properties属性值

    2023-09-20 11:54:07
  • springboot接收别人上传的本地视频实例代码

    2023-03-22 01:55:39
  • 关于mybatis3中@SelectProvider的使用问题

    2021-11-20 17:03:19
  • Java制作智能拼图游戏原理及代码

    2022-08-02 21:46:57
  • C# 反射与dynamic最佳组合示例代码

    2022-01-18 02:29:53
  • SpringBoot实现过滤器和拦截器的方法

    2022-10-21 23:29:34
  • java实现多线程的两种方式继承Thread类和实现Runnable接口的方法

    2022-07-24 04:27:18
  • asp之家 软件编程 m.aspxhome.com