当前位置: 首页 > news >正文

怎么获取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函数、准确率、交叉熵损失函数等&#xff0c…...

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采用长命名的方式来规范类的命名,能够自己表达…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...