[转] 动态创建控件布局与自动大小跟随

有人认为用写的动态创建控件很高端,其实我更喜欢拖放控件进行各种属性和事件设置很方便,而不是用写的进行各种属性和事件的设置,结合以前写的例子,对各类设置做了归类,比较方便集中写作。

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;   namespace 文字提取到数据文件 {     public partial class 文字提取到数据文件 : Form     {         DataGridView 数据列表 = new DataGridView();         TextBox 录入框 = new TextBox();         ToolTip 控件说明 = new ToolTip();         TreeView 分类树 = new TreeView();         CheckBox 肝 = new CheckBox(), 心 = new CheckBox(), 脾 = new CheckBox(), 肺 = new CheckBox(), 肾 = new CheckBox(),              热 = new CheckBox(), 温 = new CheckBox(), 寒 = new CheckBox(), 凉 = new CheckBox(), 平 = new CheckBox();           public 文字提取到数据文件()         {             InitializeComponent();         }           private void Form1_Load(object sender, EventArgs e)         {             跟随(); 停靠(); 尺寸(); 布局(); 初值(); 注明();             动态文本框();             动态表格(new string[] { "名称", "别名", "性味", "归经", "主治" });         }         //private void 动态选项框()         //{         //    int i = 分类树.Width + 5;         //    string[] 五脏五味 = { "肝(酸)", "心(苦)", "脾(甘)", "肺(辛)", "肾(咸)" };         //    foreach (string 名 in 五脏五味)         //    {         //        CheckBox 选项框 = new CheckBox();         //        选项框.Text = 名;         //        选项框.Name = 名.Remove(1);         //        选项框.Location = new Point(i, 17);         //        选项框.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right);         //        选项框.Parent = this;         //        this.Controls.Add(选项框);         //        i += 105;         //    };         //}         private void 动态文本框()         {             录入框.Text = "";             录入框.Name = string.Format("文本框{0}", 1);             录入框.AllowDrop = true;             录入框.Multiline = true;             //this.Controls.Add(录入框);         }         private void 动态表格(string[] 数据格)         {             DataTable 数据表 = new DataTable("数据表");             foreach (string 格 in 数据格)                 数据表.Columns.Add(格, typeof(string));               数据列表.AllowUserToAddRows = false;             数据列表.AllowUserToDeleteRows = false;             数据列表.AllowUserToOrderColumns = false;             数据列表.AllowUserToResizeColumns = false;             数据列表.AllowUserToResizeRows = false;             数据列表.ReadOnly = true;             数据列表.RowHeadersVisible = false;             数据列表.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;             数据列表.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;             数据列表.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;             数据列表.RowsDefaultCellStyle.WrapMode = (DataGridViewTriState.True);             数据列表.DefaultCellStyle.SelectionBackColor = Color.Transparent;             数据列表.DefaultCellStyle.SelectionForeColor = Color.Red;/*.Blue.Gold*/             数据列表.GridColor = Color.Lime;             数据列表.DataSource = 数据表;         }           private void 文字提取到数据文件_Resize(object sender, EventArgs e)         {             //MessageBox.Show("最大化!");             //this.Invalidate();             //this.Refresh();             跟随(); 停靠(); 尺寸(); 初值(); 布局(); 注明();               //System.IO.FileStream 打开 = new System.IO.FileStream(Application.StartupPath + @"\新建文本文档.txt", System.IO.FileMode.Open);             //System.IO.StreamReader 读取 = new System.IO.StreamReader(打开, Encoding.GetEncoding("GB2312"));             //while (!读取.EndOfStream)             //    数据表.Rows.Add(读取.ReadLine().Split(' '));             //打开.Close();         }         void 跟随()         {             数据列表.Anchor =                 录入框.Anchor =                 肝.Anchor = 心.Anchor = 脾.Anchor = 肺.Anchor = 肾.Anchor =                 热.Anchor = 温.Anchor = 寒.Anchor = 凉.Anchor = 平.Anchor =                 分类树.Anchor = (AnchorStyles.Top | AnchorStyles.Left);         }         void 停靠()         {             数据列表.Parent =                 录入框.Parent =                 肝.Parent = 心.Parent = 脾.Parent = 肺.Parent = 肾.Parent =                  热.Parent = 温.Parent = 寒.Parent = 凉.Parent = 平.Parent =                 分类树.Parent = this;         }         void 尺寸()         {             分类树.Size = new Size(this.Width / 5, this.Height - 42);             数据列表.Size = new Size(this.Width - 分类树.Width - 24, this.Height / 2);             录入框.Size = new Size(this.Width - 分类树.Width - 25, this.Height / 2 - 75);         }         void 布局()         {             分类树.Location = new Point(2, 2);            数据列表.Location = new Point(分类树.Right + 5, 2);            录入框.Location = new Point(分类树.Right + 5, 数据列表.Bottom + 5);             肝.Location = new Point(分类树.Width + 5, this.Height - 65);             心.Location = new Point(肝.Location.X + 65, this.Height - 65);             脾.Location = new Point(心.Location.X + 65, this.Height - 65);             肺.Location = new Point(脾.Location.X + 65, this.Height - 65);             肾.Location = new Point(肺.Location.X + 65, this.Height - 65);             热.Location = new Point(肾.Location.X + 65, this.Height - 65);             温.Location = new Point(热.Location.X + 35, this.Height - 65);             寒.Location = new Point(温.Location.X + 35, this.Height - 65);             凉.Location = new Point(寒.Location.X + 35, this.Height - 65);             平.Location = new Point(凉.Location.X + 35, this.Height - 65);         }         void 初值()         {             this.BackColor = Color.Red;             string[] 五脏五味 = { "肝(酸)", "心(苦)", "脾(甘)", "肺(辛)", "肾(咸)", "热", "温", "寒", "凉", "平" };             int 啊 = 五脏五味.Length;             Control.ControlCollection 找选项 = this.Controls;             foreach (Control 选项 in 找选项)                 if (选项 is CheckBox) 选项.Text = 五脏五味[--啊];         }         void 注明()         {             控件说明.SetToolTip(录入框, "请输入数据文本以便进行分割到数据文件保存。");             控件说明.SetToolTip(分类树, "显示选择的分类结构。");         }       } }

 

 


---------------------
作者:智者知已应修善业
来源:优快云
原文:https://blog.youkuaiyun.com/xianfajushi/article/details/83867006
版权声明:本文为作者原创文章,转载请附上博文链接!
 

一.该类的作用: 该类可以帮大家自动布局界面控件,不需要开发人员每个控件的设置属性,只需要调用方法,自动会设置该控件布局,并且控件的宽度随着窗体的变化而变化,该方法调用很简单 二.原理:使用TableLayOutPanle的功能,然后设定里面每个控件的样式 三.使用方法: 1)首先在录入数据的地方用GroupBox或者Panle作为容器(目前里面配置了这2中数据信息用户可以在ParentControlHeader类中进行相应配置) 2)然后在该容器中加入TableLayOutPanle控件,并设定行和列(例如:设定6列,奇数列的宽度都是绝对值:例如100px ,偶数列的宽度都设定为33%) 3)大家可以把相应的控件放入到TableLayOutPanle的相应单元格子中,(奇数列是标题列,偶数列是输入列) 4)在Load事件中这样调用就OK了 TableFormat tf = new TableFormat(tableLayoutPanel1); //此方法可以适用于父级控件是GroupBox或者Panel,您也可一修改 ParentControlHeader类中的配置文件,加入新的值,或者是修改已经设定的值 tf.SetTableFormat(true, PControlType.GroupControl); 这样,大家不需要设定每个TableLayout控件中的子控件的任何属性,TableFormat类帮自动布局界面上的控件,并且随着窗体的变化,控件自动变化的,当然里面有些参数,是可以设定父级控件(GroupPanle/Panle的高度=里面行高(自动计算)+用户配置高度(目前配置了GroupBox和Panle) 详细可见Demo,代码注释写的比较详细,大家可以参考下. 谢谢..^_^.. (鼓励0资源分上传)
数据集介绍:电力线目标检测数据集 一、基础信息 数据集名称:电力线目标检测数据集 图片数量: 训练集:2898张图片 验证集:263张图片 测试集:138张图片 总计:3299张图片 分类类别: 类别ID: 0(电力线) 标注格式: YOLO格式,包含对象标注信息,适用于目标检测任务。 数据格式:JPEG/PNG图片,来源于空中拍摄或监控视觉。 二、适用场景 电力设施监控巡检: 数据集支持目标检测任务,帮助构建能够自动识别和定位电力线的AI模型,用于无人机或固定摄像头巡检,提升电力设施维护效率和安全性。 能源公用事业管理: 集成至能源管理系统中,提供实时电力线检测功能,辅助进行风险 assessment 和预防性维护,优化能源分配。 计算机视觉算法研究: 支持目标检测技术在特定领域的应用研究,促进AI在能源和公用事业行业的创新发展。 专业培训教育: 数据集可用于电力行业培训课程,作为工程师和技术人员学习电力线检测识别的重要资源。 三、数据集优势 标注精准可靠: 每张图片均经过专业标注,确保电力线对象的定位准确,适用于高精度模型训练。 数据多样性丰富: 包含多种环境下的电力线图片,如空中视角,覆盖不同场景条件,提升模型的泛化能力和鲁棒性。 任务适配性强: 标注格式兼容YOLO等主流深度学习框架,便于快速集成和模型开发,支持目标检测任务的直接应用。 实用价值突出: 专注于电力线检测,为智能电网、自动化巡检和能源设施监控提供关键数据支撑,具有较高的行业应用价值。
【弹簧阻尼器】基于卡尔曼滤波弹簧质量阻尼器系统噪声测量实时状态估计研究(Matlab代码实现)内容概要:本文围绕“基于卡尔曼滤波的弹簧质量阻尼器系统噪声测量实时状态估计”展开研究,利用Matlab代码实现对系统状态的精确估计。重点在于应用卡尔曼滤波技术处理系统中存在的噪声干扰,提升对弹簧质量阻尼器系统动态行为的实时观测能力。文中详细阐述了系统建模、噪声特性分析及卡尔曼滤波算法的设计实现过程,展示了滤波算法在抑制测量噪声、提高状态估计精度方面的有效性。同时,该研究属于更广泛的信号处理状态估计技术应用范畴,适用于复杂动态系统的监控控制。; 适合人群:具备一定控制系统理论基础和Matlab编程经验的高校研究生、科研人员及工程技术人员,尤其适合从事动态系统建模、状态估计滤波算法研究的相关人员。; 使用场景及目标:①应用于机械、航空航天、自动化等领域中对振动系统状态的高精度实时估计;②为噪声环境下的传感器数据融合状态预测提供算法支持;③作为卡尔曼滤波算法在实际物理系统中应用的教学科研案例。; 阅读建议:建议读者结合Matlab代码实践,深入理解系统建模滤波器设计的关键步骤,关注噪声建模滤波参数调优对估计性能的影响,并可进一步拓展至扩展卡尔曼滤波(EKF)或无迹卡尔曼滤波(UKF)在非线性系统中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值