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

Python开发者首次使用Taotoken接入大模型API的完整步骤指南

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Python开发者首次使用Taotoken接入大模型API的完整步骤指南 对于Python开发者而言,接入大模型API进行应用开发已成为一…...

广州因特智能:AI视觉软硬结合,打破半导体检测装备“卡脖子”困境

【导语:广州因特智能科技孵化于西安电子科技大学广州研究院,专注用AI视觉技术解决工业场景的“卡脖子”检测难题,为半导体、光通信、新能源三大领域提供高端检测装备。】校地合作孵化,构建完整能力体系广州因特智能科技由西安电子…...

基于MAX78000的医疗紧急呼叫系统:边缘AI与低功耗设计实战

1. 项目概述与核心价值大家好,我是Victor Hugo,一名电子工程师。今天我想和大家分享一个我最近完成并参与设计竞赛的项目:一个基于MAX78000 FTHR开发板的医疗紧急呼叫辅助系统。这个项目的核心,不是从零开始造一个新轮子&#xff…...

Arduino ADC自检:用RC电路诊断模数转换器故障

1. 项目概述:当你的体重秤开始“说谎”你有没有遇到过这样的情况:站上家里的电子体重秤,屏幕上跳出来的数字让你瞬间怀疑人生?要么是轻得离谱,要么是重得吓人,更诡异的是,它可能只在两个固定的、…...

Xia Sql插件:可调试的SQL注入决策引擎

1. 这不是又一个“自动扫SQL”的插件,而是把渗透工程师的判断逻辑塞进了Burp里你有没有过这种经历:在Burp Proxy里看着一堆GET参数、POST JSON、Cookie字段,心里清楚“这里大概率能注入”,但手动拼payload试了七八轮,还…...

从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)

从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)当你第一次打开MPIIFaceGaze或EyeDiap数据集的压缩包时,那种面对杂乱文件夹和神秘.mat文件的迷茫感,我太熟悉了。作为计算机视觉工程师&#xf…...

收藏干货|2026 版双非零基础入局大模型开发,RAG 与 Agent 就业上岸全攻略

日常总能收到不少初学伙伴的私信,大家普遍都有同一个疑惑:二本及普通院校学历,零基础入门 RAG、Agent 大模型应用开发,究竟能不能顺利入职?行业后续发展前景又如何? 本篇 2026 年全新内容,不空谈…...

ImageGlass:一个支持90+图像格式的轻量级Windows图片查看器

ImageGlass:一个支持90图像格式的轻量级Windows图片查看器 【免费下载链接】ImageGlass 🏞 A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 还在为Windows自带的图片查看器功能单一而烦恼吗&…...

使用curl命令调试Taotoken API接口的常见问题排查

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用curl命令调试Taotoken API接口的常见问题排查 基础教程类,面向所有需要通过HTTP直接与API交互的开发者&#xff0c…...

全方位梳理 OpenClaw 部署与使用干货

OpenClaw 一键安装包|可视化部署,简化环境配置流程 ✨适配系统:Windows10/11 64 位 当前版本:v2.7.5(虾壳云版) ✨核心优势:全程可视化操作,不用命令行、不用手动配置 Python/Node…...