c# 动态生成控件
时间:2022-07-23
本文章向大家介绍c# 动态生成控件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天这个主题主要也是群里小伙伴提到的一个问题,就是如何动态的生成控件,他是想自动生成一级二级菜单这样,我这里主要是动态生成的picturebox,希望能给他起到借鉴的作用,然后举一反三完成自己的项目!
以下代码是从好几年前的一个项目中抠出来的,然后做了一些小的改动,以动态生成控件展示图片为核心!
接下来介绍下项目:控件:richTextBox1,richTextBox2 代表生产的图片框的行数和列数,可以自定义,button1名字是ACTION ,点击后自动生成图片框并加载图片,生成的picture位于panel1中,每次双击pictrue,会放大图片显示到右边的图片框!
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace 动态生成控件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
panel1.AutoScroll = true;//让panel显示滚动条
}
public string ImagePath = Application.StartupPath +"\image\";
string[,] ImageFromPath = new string[300, 300];
int Row = 3, Cloumn = 3;
public string AmpImagePath = string.Empty;
/// <summary>
/// 自动生成图片控件并加载图片,同时给图片控件添加双击事件
/// </summary>
/// <param name="row">生成图片控件的行数</param>
/// <param name="cloumn">生成图片控件的列数</param>
public void PictureControl(int row, int cloumn)
{
try
{
int ImageBoxCount = 0;
panel1.Controls.Clear();
for (int i = 0; i < row; i++)
for (int j = 0; j < cloumn; j++)
{
PictureBox p = new PictureBox();
p.Name = ImageBoxCount.ToString();
p.Size = new System.Drawing.Size(108, 216);//长宽比例是1.25:1
p.Top = i * 226;
p.Left = j * 118;
p.MouseDoubleClick += M;//鼠标双击事件
ImageBoxCount++;
p.BackColor = Color.Gray;
p.SizeMode = PictureBoxSizeMode.Zoom;
p.BorderStyle = BorderStyle.FixedSingle;
if (IsFileInUse(ImageFromPath[i, j]) == false)
{
Stream s = File.Open(ImageFromPath[i, j], FileMode.Open);
p.Image = Image.FromStream(s);
s.Close();
s.Dispose();
}
else
{
//p.Image = Image.FromFile(ImageFromPath[i, j]);
}
p.BackColor = Color.Gray;
this.panel1.Controls.Add(p);
}
}
catch(Exception e)
{
MessageBox.Show(e.ToString());
}
}
private void M(object sender, EventArgs e)
{
try
{
PictureBox p = sender as PictureBox;
AmpImagePath = ImageFromPath[Convert.ToInt32(p.Name) / Cloumn,Convert.ToInt32(p.Name) % Cloumn];
Stream s = File.Open(AmpImagePath, FileMode.Open);
pictureBox1.Image = Image.FromStream(s);
s.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void button1_Click(object sender, EventArgs e)
{
Row = int.Parse(richTextBox1.Text);
Cloumn = int.Parse(richTextBox2.Text);
for (int i = 0; i < Row; i++)
for (int j = 0; j < Cloumn; j++)
{
ImageFromPath[i, j] = ImagePath + (i * Cloumn + j + 1).ToString() + ".jpg"; //保存每张图的路径
//Console.WriteLine(ImagePath + (i * 3 + j + 1).ToString() + ".jpg");
}
PictureControl(Row, Cloumn);
}
public static bool IsFileInUse(string fileName)
{
bool inUse = true;
FileStream fs = null;
try
{
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None);
inUse = false;
}
catch
{
}
finally
{
if (fs != null)
fs.Close();
}
return inUse;//true表示正在使用,false没有使用
}
}
}
github代码地址:
https://github.com/zyr365/Dynamically-build-control需要的朋友可以上去下载源码,都是我测试通过的!
学习心得:代码这东西一定记得勤动手实践,不要光看,以免眼高手低,项目也不是做的越多越好,你可以把一个项目做的很细很完美,不断添加各种功能模块上去也是很不错的学方法!
- IO约束(下)
- 可以通过基类实现的几种功能。vs2008 .net 2.0
- Python基础知识2:字典
- 桶式移位器
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.7 增加了一个js函数的分页方式。
- FireEye报告:揭露新型工控系统恶意软件TRITON
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.6 修改了几个小bug,使用演示。
- Invoke-PSImage:将PS脚本隐藏进PNG像素中并用一行指令去执行它
- linux的内存清理相关知识!
- 一个页面搞定几乎所有的列表需求的实现思路和一点代码。
- 实现 Table 的行交替颜色、选中行变色的一种方法。演示+源码
- 【知识】使用Python来学习数据科学的完整教程
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.4 增加了几个分页算法
- 虚拟时钟
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决pyqt5异常退出无提示信息的问题
- TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
- 来来来,让咱重新认识一下算法的复杂度!
- 带你通过字节跳动面试---操作系统复习
- Java 8 中的接口和抽象类到底有啥区别?
- Android自定义View实现简单炫酷的球体进度球实例代码
- 详解android 中文字体向上偏移解决方案
- Android自定义控件仿ios下拉回弹效果
- 当飞桨PaddleHub遇到微信小程序,AI也能指物作诗
- Android仿QQ好友详情页下拉顶部图片缩放效果
- 数组对象转为Map
- TensorFlow2.X使用图片制作简单的数据集训练模型
- Android高性能日志写入方案的实现
- MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列)
- 想后台运行没想到导致磁盘满了