怎么获取winform中动态代码生成的控件的状态
winform怎么获取动态代码生成窗口里面的控件的属性状态
MainForm中调用
private void ShowPropertyForm()
{
PropertyForm form = new PropertyForm(selectedShape);
form.ShowDialog();
pictureBox1.Refresh();
}
MainForm中生成
public class PropertyForm : Form{private ShapeType selectedShape;private Shape shape;private DashStyle StrokeStyle; //线型private float StrokeWidth = 1.0f; //线宽private Color StrokeColor; //边框颜色 private RadioButton IsFilledRadioButton; //是否填充private RadioButton NoFilledRadioButton;private ColorDialog FilledColorColorDialog; //填充颜色private Button renewButton;private Button cancelButton;private Color CurrentStrokeColor;public PropertyForm(Shape shape){this.shape = shape;InitializeComponents();}public void InitializeComponents(){this.Text = "图形属性";this.FormBorderStyle = FormBorderStyle.FixedDialog;//属性框边框样式this.MaximizeBox = false;//右上角是否有最大化按钮this.MinimizeBox = false;//右上角是否有最小化按钮this.StartPosition = FormStartPosition.CenterParent;this.ClientSize = new Size(200, 350);// 添加类型Labelthis.Controls.Add(new Label(){Text = "类型",Location = new Point(25, 28),Size = new Size(30, 20),});//添加下拉框this.Controls.Add(new ComboBox(){Location = new Point(60, 25),Size = new Size(115, 20),Text = shape.Type.ToString()});//添加线型Labelthis.Controls.Add(new Label(){Text = "线型",Location = new Point(25, 78),Size = new Size(30, 20)});//添加下拉框ComboBox comboBox1 = new ComboBox();comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;comboBox1.Items.Add(DashStyle.Solid);comboBox1.Items.Add(DashStyle.Dash);comboBox1.Items.Add(DashStyle.DashDot);comboBox1.Items.Add(DashStyle.DashDotDot);comboBox1.SelectedIndex = (int)selectedShape;comboBox1.Location = new Point(60, 75);comboBox1.Size = new Size(115, 20);this.Controls.Add(comboBox1);//添加线宽Labelthis.Controls.Add(new Label(){Text = "线宽",Location = new Point(25, 128),Size = new Size(30, 20)});//添加下拉框ComboBox comboBox2 = new ComboBox();comboBox2.Text = shape.StrokeWidth.ToString();comboBox2.Location = new Point(60, 125);comboBox2.Size = new Size(115, 20);comboBox2.Items.Add("0.5");comboBox2.Items.Add("1");comboBox2.Items.Add("2");comboBox2.Items.Add("4");comboBox2.Items.Add("8");comboBox2.Items.Add("16");comboBox2.Items.Add("32");this.Controls.Add(comboBox2);//添加颜色Labelthis.Controls.Add(new Label(){Text = "颜色",Location = new Point(25, 178),Size = new Size(30, 20)});//添加颜色对话框Button StrokeColorbutton = new Button();StrokeColorbutton.Location = new Point(60, 175);StrokeColorbutton.Size = new Size(115, 20);this.Controls.Add(StrokeColorbutton);//添加填充labelthis.Controls.Add(new Label(){Text = "填充",Location = new Point(25, 240),Size = new Size(30, 20)});RadioButton radioButton2 = new RadioButton();radioButton2.Text = "否";radioButton2.Location = new Point(100, 238);this.Controls.Add(radioButton2);//添加RadioButtonRadioButton radioButton1 = new RadioButton();radioButton1.Text = "是";radioButton1.Location = new Point(60, 238);this.Controls.Add(radioButton1);//添加颜色Labelthis.Controls.Add(new Label(){Text = "颜色",Location = new Point(25, 280),Size = new Size(30, 20)});//添加颜色对话框Button FillColorbutton = new Button();FillColorbutton.Location = new Point(60, 275);FillColorbutton.Size = new Size(115, 20);this.Controls.Add(FillColorbutton);//添加图形GroupBoxthis.Controls.Add(new GroupBox(){Text = "图形",Location = new Point(0, 5),Size = new Size(200, 50),});//添加类型GroupBoxthis.Controls.Add(new GroupBox(){Text = "边框",Location = new Point(0, 55),Size = new Size(200, 150)});//添加内部GroupBoxthis.Controls.Add(new GroupBox(){Text = "内部",Location = new Point(0, 205),Size = new Size(200, 100)});//添加更新ButtonrenewButton = new Button();renewButton.Location = new Point(20, 315);renewButton.Size = new Size(70, 30);renewButton.Text = "更新";renewButton.DialogResult = DialogResult.OK;this.Controls.Add(renewButton);//添加取消ButtoncancelButton = new Button();cancelButton.Location = new Point(110, 315);cancelButton.Size = new Size(70, 30);cancelButton.Text = "取消";cancelButton.DialogResult = DialogResult.Cancel;this.Controls.Add(cancelButton);renewButton.Click += renewButton_Click;comboBox2.SelectedValueChanged += ComboBox2_SelectedValueChanged;}public static float nStrokeWidth;private void renewButton_Click(object sender, EventArgs e){shape.StrokeWidth = 这里取控件中的状态属性 ;MessageBox.Show("更新成功");}}
遇到的困难
在renewButton_Click方法中,无法调用生成控件的状态,只有在InitializeComponents方法中可以使用
解决思路
1,首先想到的是在InitializeComponents中把控件的属性赋值出去给变量,然后在其他地方调用
InitializeComponents只初始化刚刚生成的时候,后面调用的变量为空值不行
2.renewButton_Click方法放入InitializeComponents中,private删除,即可调用,不影响,成功解决
解决办法
public class PropertyForm : Form{private ShapeType selectedShape;private Shape shape;private DashStyle StrokeStyle; //线型private float StrokeWidth = 1.0f; //线宽private Color StrokeColor; //边框颜色 private RadioButton IsFilledRadioButton; //是否填充private RadioButton NoFilledRadioButton;private ColorDialog FilledColorColorDialog; //填充颜色private Button renewButton;private Button cancelButton;private Color CurrentStrokeColor;public PropertyForm(Shape shape){this.shape = shape;InitializeComponents();}public void InitializeComponents(){this.Text = "图形属性";this.FormBorderStyle = FormBorderStyle.FixedDialog;//属性框边框样式this.MaximizeBox = false;//右上角是否有最大化按钮this.MinimizeBox = false;//右上角是否有最小化按钮this.StartPosition = FormStartPosition.CenterParent;this.ClientSize = new Size(200, 350);// 添加类型Labelthis.Controls.Add(new Label(){Text = "类型",Location = new Point(25, 28),Size = new Size(30, 20),});//添加下拉框this.Controls.Add(new ComboBox(){Location = new Point(60, 25),Size = new Size(115, 20),Text = shape.Type.ToString()});//添加线型Labelthis.Controls.Add(new Label(){Text = "线型",Location = new Point(25, 78),Size = new Size(30, 20)});//添加下拉框ComboBox comboBox1 = new ComboBox();comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;comboBox1.Items.Add(DashStyle.Solid);comboBox1.Items.Add(DashStyle.Dash);comboBox1.Items.Add(DashStyle.DashDot);comboBox1.Items.Add(DashStyle.DashDotDot);comboBox1.SelectedIndex = (int)selectedShape;comboBox1.Location = new Point(60, 75);comboBox1.Size = new Size(115, 20);this.Controls.Add(comboBox1);//添加线宽Labelthis.Controls.Add(new Label(){Text = "线宽",Location = new Point(25, 128),Size = new Size(30, 20)});//添加下拉框ComboBox comboBox2 = new ComboBox();comboBox2.Text = shape.StrokeWidth.ToString();comboBox2.Location = new Point(60, 125);comboBox2.Size = new Size(115, 20);comboBox2.Items.Add("0.5");comboBox2.Items.Add("1");comboBox2.Items.Add("2");comboBox2.Items.Add("4");comboBox2.Items.Add("8");comboBox2.Items.Add("16");comboBox2.Items.Add("32");this.Controls.Add(comboBox2);//添加颜色Labelthis.Controls.Add(new Label(){Text = "颜色",Location = new Point(25, 178),Size = new Size(30, 20)});//添加颜色对话框Button StrokeColorbutton = new Button();StrokeColorbutton.Location = new Point(60, 175);StrokeColorbutton.Size = new Size(115, 20);this.Controls.Add(StrokeColorbutton);//添加填充labelthis.Controls.Add(new Label(){Text = "填充",Location = new Point(25, 240),Size = new Size(30, 20)});RadioButton radioButton2 = new RadioButton();radioButton2.Text = "否";radioButton2.Location = new Point(100, 238);this.Controls.Add(radioButton2);//添加RadioButtonRadioButton radioButton1 = new RadioButton();radioButton1.Text = "是";radioButton1.Location = new Point(60, 238);this.Controls.Add(radioButton1);//添加颜色Labelthis.Controls.Add(new Label(){Text = "颜色",Location = new Point(25, 280),Size = new Size(30, 20)});//添加颜色对话框Button FillColorbutton = new Button();FillColorbutton.Location = new Point(60, 275);FillColorbutton.Size = new Size(115, 20);this.Controls.Add(FillColorbutton);//添加图形GroupBoxthis.Controls.Add(new GroupBox(){Text = "图形",Location = new Point(0, 5),Size = new Size(200, 50),});//添加类型GroupBoxthis.Controls.Add(new GroupBox(){Text = "边框",Location = new Point(0, 55),Size = new Size(200, 150)});//添加内部GroupBoxthis.Controls.Add(new GroupBox(){Text = "内部",Location = new Point(0, 205),Size = new Size(200, 100)});//添加更新ButtonrenewButton = new Button();renewButton.Location = new Point(20, 315);renewButton.Size = new Size(70, 30);renewButton.Text = "更新";renewButton.DialogResult = DialogResult.OK;this.Controls.Add(renewButton);//添加取消ButtoncancelButton = new Button();cancelButton.Location = new Point(110, 315);cancelButton.Size = new Size(70, 30);cancelButton.Text = "取消";cancelButton.DialogResult = DialogResult.Cancel;this.Controls.Add(cancelButton);renewButton.Click += renewButton_Click;void renewButton_Click(object sender, EventArgs e){shape.StrokeWidth =(float)Convert.ToInt32( comboBox2.SelectedItem);MessageBox.Show("更新成功");}}public static float nStrokeWidth;}
相关文章:

怎么获取winform中动态代码生成的控件的状态
winform怎么获取动态代码生成窗口里面的控件的属性状态 MainForm中调用 private void ShowPropertyForm() { PropertyForm form new PropertyForm(selectedShape); form.ShowDialog(); pictureBox1.Refresh(); …...

Windows安装Maven并配置环境
Windows下安装和配置Maven的步骤 介绍:步骤:步骤 1:下载Maven步骤 2:解压缩Maven分发包步骤 3:设置环境变量步骤 4:验证安装 结论: 介绍: Maven是一个非常流行的构建和项目管理工具…...

致力于中小企业JavaEE企业级快速开发平台、后台框架平台
一、开源项目简介 J2eeFAST 是一个 Java EE 企业级快速开发平台, 致力于打造中小企业最好用的开源免费的后台框架平台 。系统基于(Spring Boot、Spring MVC、Apache Shiro、MyBatis-Plus、Freemarker、Bootstrap、AdminLTE)经典技术开发&…...

【神经网络】tensorflow实验9--分类问题
1. 实验目的 ①掌握逻辑回归的基本原理,实现分类器,完成多分类任务; ②掌握逻辑回归中的平方损失函数、交叉熵损失函数以及平均交叉熵损失函数。 2. 实验内容 ①能够使用TensorFlow计算Sigmoid函数、准确率、交叉熵损失函数等,…...

LeetCode2. 两数相加
写在前面: 题目链接:LeetCode2两数相加 编程语言:C 题目难度:中等 一、题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 …...

基于无线传感网络(WSN)的目标跟踪技术(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 无线传感器网络由于其自组织性、鲁棒性及节点数量巨大的特点,非常适合于目标跟踪。无线传感器网络中的移动目标跟踪实际上就是…...

百度发布首个可信AI工具集TrustAI,助力数据分析与增强
百度发布首个集分析与增强于一体的可信AI工具集TrustAI,该工具集旨在帮助用户快速、准确地对各种类型的数据进行分析和增强,从而提高数据的价值和可信度。 随着人工智能技术的快速发展,数据的价值和重要性日益凸显。然而,在数据处…...

电力系统负荷与电价预测优化模型(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

asp.net+C#超市商品进销存管理系统
本超市商品管理系统主要超市内部提供服务,系统分为管理员员工两部分。 本研究课题重点主要包括了下面几大模块:管用户登录,员工管理,商品管理,进货管理,销售管理,供应商信息,会员信…...

轻量级K8s发行版的五大优势,助力企业快速拥抱边缘计算
随着物联网和移动设备的普及,边缘计算已成为当前信息技术领域的热门话题。为了满足这一需求,越来越多的企业开始探索使用容器化技术来打造轻量级的K8s发行版。这种发行版可以更加灵活地部署在物理边缘,提供更快速、更稳定的服务。 在这篇文章…...

【深入理解redis】数据结构
文章目录 动态字符串SDS字符串编码类型 intsetDictZipListZipList的连锁更新问题 QuickListSkipListRedisObjectStringListSet结构ZSETHash Redis 共有 5 种基本数据结构:String(字符串)、List(列表)、Set(…...

《计算机网络—自顶向下方法》 第三章Wireshark实验:DNS协议分析
域名系统 DNS(Domain Name System) 是互联网使用的命名系统,用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS,但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字,并使…...

JUC(十二)-线程中断相关问题(LockSupport,sleep,InterruptException)
JUC线程中断相关问题总结 线程中断相关问题总结 JUC线程中断相关问题总结一、 sleep 和线程中断之间的关系和特点结论测试验证代码如下 二、 LockSupport 和线程中断之间的关系结论测试验证代码如下 一、 sleep 和线程中断之间的关系和特点 结论 线程调用 Thread.sleep之后会进…...

Kotlin高级协程
Kotlin高级协程 一.前言二.先从线程说起三.协程的设计思想四.协程特点:优雅的实现移步任务五.协程基本使用六.协程和线程相比有什么特点,如何优雅的实现异步任务 一.前言 在文章正式上干货之前,先说一点背景吧;我是 Kotlin 协程官…...

车载软件架构——闲聊几句AUTOSAR BSW(四)
我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我们并不必要为了和谐,而时刻保持通情达理;我们需要具备的是,偶尔有肚量欣然承认在某些方面我们可能会有些不可理喻。该有主见的时候能掷地有声地镇得住场…...
Linux:rpm查询安装 yum安装
环境: 需要插入安装镜像 镜像内有所需的安装库 我这里使用的虚拟机直接连接光盘 连接的光盘挂载在/dev/cdrom 由于我们无法直接进入,所以选择把/dev/cdrom挂载到别的地方即可 mount /dev/cdrom /123 将/dev/cdrom 挂载到 /123 目录下 Packages下就是…...

Android音视频开发之音频录制和播放
1.封装音频录制工具类: public class RecorderAudioManagerUtils {private static volatile RecorderAudioManagerUtils mInstance;public static RecorderAudioManagerUtils getInstance() {if (mInstance null) {synchronized (RecorderAudioManagerUtils.class…...

Java之单例模式
目录 一.上节内容 1.什么是线程安全 2.线程不安全的原因 3.JMM(Java内存模型) 4.synchronized锁 5.锁对象 6.volatile关键字 7.wait()和notify() 8.Java中线程安全的类 二.单例模式 1.什么是单例 2.怎么设计一个单例 1.口头约定 2.使用编程语言的特性 三.饿汉模式…...

【分组码系列】线性分组码的网格图和维特比译码
线性分组码的网格图 由于码字的比特位是统计独立的,所以编码过程可以利用有限状态机来描述,它能精确地确定初始和最终状态。可以利用网格图进一步描述编码过程[36],采用维特比算法进行最大似然译码. 在GF(2)上定义线性分组码(n,k)。相应的(n-k)Xn维校验阵可以写成 令码字为系…...

代码命名规范是真优雅呀!代码如诗
日常编码中,代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图,也是一项必备的能力。那它们有什么规律呢? Java项目的代码结构,能够体现它的设计理念。Java采用长命名的方式来规范类的命名,能够自己表达…...

你不知道的自动化?使用自动化测试在项目中创造高业务价值...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 脱离数据支撑谈价…...

通过实现一个简单的 JavaScript 猜数字大小的游戏,介绍如何进行布局样式处理
JavaScript 猜数字大小是一个非常简单、却又经典的游戏,可以锻炼玩家的逻辑思维能力。在这个游戏中,电脑会随机生成一个数字,玩家需要根据提示逐步猜出正确的数字。接下来,我们将通过实现一个简单的 JavaScript 猜数字大小游戏来介…...

Java设计模式(二十二)策略模式
一、概述 策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。策略模式通过将算法封装成独立的策略类,使得它们可以相互替换,而不影响使用算法的客户端。这样可以使客户端代码与具体算法的实现细节解耦,提高了代码的可…...

【沐风老师】一步一步教你在3dMax中进行UVW贴图和展开UVW的方法
将简单或程序材质应用于对象并不难。但是当表面需要在其上显示某种纹理时,它会变得更加复杂。任何纹理贴图都放在材质的 Diffuse 插槽中,但渲染的结果可能无法预测。这就是为什么我们需要了解 3DMAX 如何将纹理应用于 3D 对象,什么是 UVW 贴图…...

Redis主从复制(搭建集群的一种方式)【故障转移,内存,回收】
做一个伪集群 配置文件: daemonize yes port 7777 logfile .redis-7777.log dir ./ bind 0.0.0.0启动6666 and 7777 现在设置主从表 但是有个问题我把服务器停掉 关系就会解除 还可以手动解除 slaveof no one 命令 配置Sentinel(哨兵&#…...

专业专注,极致体验,高端隐形智能晾衣机品牌邦先生官宣浙江卫视知名主持人沈涛为品牌代言人
5月11日,高端隐形晾衣架领导品牌邦先生正式宣布,浙江卫视知名主持人沈涛为品牌代言人,以更高标准的晾晒,共同迎接智能晾晒大时代,用科技力量创造美好智慧家居生活。 专业实力品牌邦先生王牌主持沈涛 作为浙江卫视的“王…...

SpringCloud使用SkyWalking实现分布式链路追踪1
文章目录 一、MicrometerTracingBrave(Sleuth)链路追踪1、MicrometerTracingBrave和Zipkin的概论2、Docker搭建Zipkin服务3、MicrometerTracingBrave和Zipkin实现链路追踪 二、SkyWaking服务的安装与使用1、SkyWalking的概论2、Java探针的环境搭建3、Java探针实现日志监控4、Sk…...

【牛客刷题专栏】0x28:JZ30 包含min函数的栈(C语言编程题)
前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…...

聚焦丨酷雷曼荣列XRMA联盟成员单位
自“元宇宙”概念兴起之初,酷雷曼VR所属北京同创蓝天云科技有限公司就积极布局、探索和实践。2022年12月,酷雷曼VR成功加入虚拟现实与元宇宙产业联盟(XRMA),正式被接纳为联盟成员单位,意味着酷雷曼公司将进…...

物联网架构和技术:如何实现物物互联和智能化控制
第一章:引言 物联网是一种新兴的技术领域,通过将物理设备、传感器和软件等连接起来,可以实现设备之间的互联互通,让各种设备可以进行数据交换和智能化控制。在这个数字化时代,物联网已经成为了连接万物的关键技术之一…...