本文实例中的自定义类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 == || value == || value == || value == || value == || value == || value == )//只能 是4、、、、、、
{
picNum = value;
this.SetPictureBox(this.picNum);
}
else
{
this.PicNum = ;
this.SetPictureBox(this.picNum);
}
}
} public PictureControl()
{
this.picNum = ;
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 : this.SetPictureBox(, , size); break;
case : this.SetPictureBox(, , size); break;
case : this.SetPictureBox(, , size); break;
case : this.SetPictureBox(, , size); break;
case : this.SetPictureBox(, , size); break;
case : this.SetPictureBox(, , size); break;
case : this.SetPictureBox(, , 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 = ;
for (int i = ; i < x; i++)
{
for (int j = ; 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 = -;
return p;
}
/// <summary>
/// 根据屏幕序号设置图像
/// </summary>
/// <param name="index">屏幕号</param>
/// <param name="img">图像</param>
public void SetImageByIndex(int index, Image img)
{
GetPicByIndex(index).Image = img;
}
}

C#分屏控件用法实例的更多相关文章

  1. [深入浅出Windows 10]分屏控件(SplitView)

    4.18 分屏控件(SplitView) 分屏控件(SplitView)是Windows 10新增的控件类型,也是Windows 10通用应用程序主推的交互控件,通常和一个汉堡按钮搭配作为一种抽屉式菜 ...

  2. Jquery + css 日期控件用法实例.zip

    /*==============================================================================** Filename:common.j ...

  3. 关于Datagridview控件用法的一些总结(设置列chicun)

    1. 关于Datagridview控件用法的一些总结:http://www.cnblogs.com/mingjiatang/p/4968049.html

  4. IOS开发之XCode学习013:步进器和分栏控件

    此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能:  1.定义UIStepper和UISegmente ...

  5. MFC中ComboBox控件用法

    MFC ComboBox 一.入门篇 ComboBox (组合框)控件很简单,可以节省空间.从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的.用户可以从一个预先定义的列表里选择一个选项 ...

  6. CustomValidator控件用法

    虽然大部分时间一直从事asp.net的开发,对于一些常用的asp.net服务器端验证控件及它们的组合使用比较熟悉,如:CompareValidator ——比较验证控件RangeValidator — ...

  7. Python Tkinter基础控件入门实例

    分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 ...

  8. DevExpress XtraScheduler日程管理控件应用实例(2)-- 深入理解数据存储

    DevExpress年终击穿底价,单套授权低至67折!查看详情>>> 在上篇随笔<DevExpress XtraScheduler日程管理控件应用实例(1)-- 基本使用> ...

  9. MFC按钮、列表控件应用实例(一)

    需求:实现张三.李四.王五 3 人的课程选择,并将选课结果提交到列表框中显示. 实现过程: 1.建立对话框mfc工程. 2.添加控件 tab 顺序 控 件 类 型 控件 ID1 Button IDC_ ...

随机推荐

  1. 进入GRUB改root用户密码

    开机读取倒计时时按任意键----e---->选择第二行 kernel ---->按e, 再按空格 >输入1----回车--->选择kernel输入b----> passw ...

  2. java反射工具类

    package com.yingchao.kgou.core; import java.lang.reflect.Field; import java.lang.reflect.InvocationT ...

  3. C++视频课程小结(2)

    C++远征之离港篇 章节介绍: 每章小结: 第一章:大致讲了一下本章会讲的内容:引用vs指针.const vs #define(这个我在C里都没用过).函数变得更强大.内存管理要小心之类的. 第二章: ...

  4. arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])

    测试方法 function test(){ var arr = [0,1,2,3]; arr.splice(1,1,'a');//case console.dir(arr); } case1: arr ...

  5. 关于TabControl的Trigger【项目】

    我有一个TabControl <TabControl x:Name="ToolSystemSection" Grid.Row="4" ContentTem ...

  6. android Notification和NotificationManager的使用

    Notification和NotificationManager 1.Broadcast Receiver组件没有提供可视化的界面来显示广播信息.这里我们可以使用Notification和Notifi ...

  7. 数据库相关文章转载(1) MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  8. Ext的Panel总结(好文章)

    我刚才禁不住诱惑去看了一下Ext.Window的API文档,发现只是比Panel多了点什么最大化.最小化.关闭.置前.置后.动画引发目标设置.可调整大小这些功能.像什么标题栏.工具栏之类的东西在Ext ...

  9. word wrap 解惑

    源起 我们经常需要“修复”一个老生常谈的“bug”,那就是文本的自动换行问题.在专业术语上,这种期望得到的渲染现象被称作“word wrap”,即文本处理器有能力把超出页边的整个词自动传到下一行. 在 ...

  10. imindmap7_windows_7.0

    思维导图工具: imindmap7_windows_7.0 iMindMap7.0 和谐包V1.0 22:27:23