C#winform上位机开发学习笔记9-串口助手的多窗体功能添加

1.功能描述

涉及子窗体的创建过程,子窗体的调用操作,子窗体与主窗体的显示位置设置,子窗体随主窗体移动

2.代码部分

步骤1:新建button并修改Text

步骤2:在现工程中新建项目

步骤3:选择窗体修改窗体名称

步骤4:创建好新窗体

步骤5:定义新窗体私有变量,通过类声明一个变量

        //定义子窗体变量,供主窗体使用
        private static WaveForm WaveForm;

步骤6:编辑波形显示按钮事件

实现功能1:点击按钮弹出子窗体,关闭子窗体,再次点击则再次弹出窗体,窗体存在时无法通过点击按钮显示更多相同子窗体

//第一次创建WaveForm实体
            if (WaveForm == null)
            {
                //创建新窗体
                WaveForm = new WaveForm();
            }
            else
            {
                //多次创建通过判断IsDisposed确定窗口是否已经关闭,避免同窗口多开
                if (WaveForm.IsDisposed == true)//判断该控件有无释放,若释放则重新创建窗体
                {
                    //如果窗体已经关闭,需要重新创新
                    WaveForm = new WaveForm();
                }
            }
            //新建窗体
            //WaveForm = new WaveForm();//发现不用if语句判断直接创建窗体也能实现一样的功能
            //窗体展示
            WaveForm.Show();

实现功能2:子窗体紧靠主窗体位置显示

            //设置波形窗体紧靠主窗体
            this.Left = 0;//主窗体左边的坐标为0
            WaveForm.Location = this.Location;//主窗体坐标赋给子窗体
            WaveForm.Left = this.Right;//主窗体的右显示坐标赋给子窗体左显示坐标

实现功能3:主窗体位置改变事件,子窗体随主窗体位置移动

//主窗体位置改变事件
        private void Form1_LocationChanged(object sender, EventArgs e)
        {
            //如果子窗体打开
            if (WaveForm != null)
            {
                WaveForm.Location = this.Location;//主窗体坐标赋给子窗体
                WaveForm.Left = this.Right;//主窗体的右显示坐标赋给子窗体左显示坐标
            }
        }

3.完整代码

        //定义子窗体变量,供主窗体使用
        private static WaveForm WaveForm;
//波形显示按钮事件
        private void button30_Click(object sender, EventArgs e)
        {
            //第一次创建WaveForm实体
            if (WaveForm == null)
            {
                //创建新窗体
                WaveForm = new WaveForm();
            }
            else
            {
                //多次创建通过判断IsDisposed确定窗口是否已经关闭,避免同窗口多开
                if (WaveForm.IsDisposed == true)//判断该控件有无释放,若释放则重新创建窗体
                {
                    //如果窗体已经关闭,需要重新创新
                    WaveForm = new WaveForm();
                }
            }
            //新建窗体
            //WaveForm = new WaveForm();//发现不用if语句判断直接创建窗体也能实现一样的功能
            //窗体展示
            WaveForm.Show();

            //设置波形窗体紧靠主窗体
            this.Left = 0;//主窗体左边的坐标为0
            WaveForm.Location = this.Location;//主窗体坐标赋给子窗体
            WaveForm.Left = this.Right;//主窗体的右显示坐标赋给子窗体左显示坐标
        }
//主窗体位置改变事件-主窗体随子窗体移动
        private void Form1_LocationChanged(object sender, EventArgs e)
        {
            //如果子窗体打开
            if (WaveForm != null)
            {
                WaveForm.Location = this.Location;//主窗体坐标赋给子窗体
                WaveForm.Left = this.Right;//主窗体的右显示坐标赋给子窗体左显示坐标
            }
        }

4.测试结果

点击波形显示按钮,弹出波形显示子窗体,且按照预设位置进行窗体展示,子窗体随主窗体移动,功能添加成功,

参考自B站硬件家园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/341480.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SCCB接口

文章目录 概述引脚传输时序起始/结束信号三线模式两线模式 传输周期3阶段写传输周期2阶段写传输周期2阶段读传输周期阶段一 ID Address阶段二 子地址/读数据阶段三 写数据 SCCB与IIC区别未完待续(还有代码)... 概述 SCCB(Serial Camera Control Bus&…

【极数系列】Flink 初相识(01)

# 【极数系列】Flink 初相识(01) 引言 Flink官网:https://flink.apache.org/ Flink版本:https://flink.apache.org/blog/ Flink文档:https://ci.apache.org/projects/flink/flink-docs-release-1.12/ Flink代码库…

Redis(五)管道

文章目录 官网总结Pipeline与原生批量命令对比Pipeline与事务对比使用Pipeline注意事项 官网 https://redis.io/docs/manual/pipelining/ Pipeline是为了解决RTT往返回时,仅仅是将命令打包一次性发送对整个Redis的执行不造成其它任何影响 总结 Pipeline与原生批量…

Med-YOLO:3D + 医学影像 + 检测框架

Med-YOLO:3D 医学影像 检测框架 提出背景设计思路网络设计训练设计讨论分析 魔改代码:加强小目标检测总结 提出背景 论文链接:https://arxiv.org/abs/2312.07729 代码链接:https://github.com/JDSobek/MedYOLO 提出背景&…

flutter设置windows是否显示标题栏和状态栏和全屏显示

想要让桌面软件实现全屏和不显示状态栏或者自定义状态栏,就可以使用window_manager这个依赖库,使用起来还是非常方便的,可以自定义显示窗口大小和位置,还有设置标题栏是否展示等内容,也可以设置可拖动区域。官方仓库地…

<C++>STL->list

list的介绍 list list是一个类模板,第一个模板参数为存储数据类型;第二个模板参数为空间适配器list是一个可以在常数时间内完成任意位置的插入和删除的顺序容器。list容器是以双链表的形式实现的;双链表可以将其包含的每个元素存储在不同且…

Java开发工具:IntelliJ IDEA 2023 for Mac中文激活

IntelliJ IDEA 2023是一款由JetBrains开发的强大的集成开发环境(IDE)软件,适用于多个编程语言。它旨在提高开发人员的生产力和代码质量。 软件下载:Java开发工具:IntelliJ IDEA 2023 for Mac中文激活 IntelliJ IDEA 20…

Docker入门学习

1、docker简介 1.1什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitH…

Maven工程继承和聚合关系

1. Maven工程继承关系 1.1 继承概念 Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。 1.2 继承作用 在父工程中统一管理项目中的依赖信息。 …

Kafka(三)【Broker 存储】

目录 前言 Kafka Broker 1、工作流程 1.1、Zookeeper 存储的 Kafka 信息 1.2、Kafka Broker 的总体工作流程 1.3、Broke 重要参数 2、Kafka 副本 2.1、副本基本信息 2.2、Keader 选举流程 2.3、Leader 和 Follower 的故障处理细节 Follower 故障 Leader 故障&#x…

GAMMA处理数据(五)

1、差分干涉 命令:SLC_diff_int 2、相干性估计 命令:cc_ad 3、地形相位去除 因为这个错误:浪费了大把时间,到处百度,bing,怀疑是脑子糊涂了,我的参数输入错误了,命令叫输入par文件…

智能合约:Web3的商业合作新模式

随着区块链技术的发展,智能合约在Web3时代崭露头角,成为商业合作中的全新模式。这一技术不仅重新定义了商业合作的方式,还为各行各业带来了更加高效、透明和安全的商务交往。本文将深入探讨智能合约在Web3时代的崭新商业合作模式,…

【一站解决您的问题】mac 利用命令升级nodejs、npm、安装Nodejs的多版本管理器n、nodejs下载地址

一:下载nodejs 官网地址,点击下载稳定版 https://nodejs.org/en 如果官网下载特别慢,可以点击这个地址下载 点击这里 https://nodejs.cn/download/current/ 安装完成后,就包含了nodejs 和 npm。此时您的版本就是下载安装的版本…

Redis 面试题 | 05.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

STM32WLE5JC 低功耗模式

低功耗模式 该器件支持多种功耗模式,以实现低功耗、短启动时间、可用外设和可用唤醒源之间的最佳折衷。 默认情况下,在系统或上电复位后,微控制器处于运行模式,范围1: 休眠模式:CPU时钟关闭,…

使用PSIM软件生成DSP28335流水灯程序

最近在学习DSP28335芯片,然后在使用PSIM仿真软件时发现这个仿真软件也支持28335芯片,于是就想学习下如何在PSIM软件中使用DSP28335芯片。在PSIM自带的官方示例中有使用DSP28335芯片的相关例子。 工程下载链接 https://download.csdn.net/download/qq_20…

mockjs使用(2)

mockjs使用(1) 4、Mock 4.1 Mock.mock() 根据数据模版生成模拟数据 Mock.mock( rurl?, rtype?, template|function(options) )问号代表该参数不必填 4.1.1 各参数及其默认值 rurl: 不必填。表示需要拦截的URL,可以使URL字符串或URL正…

QT quick基础:组件Canvas

参考《QT quick 核心编程》 使用qml画图。以下面的代码段为例,记录画图方法。 一、基本用法 Canvas {// 画布id:canvas;width: parent.width; // 画布宽度height: parent.height;// 画布高度onPaint: {var ctx canvas.getContext("2d"); // 使用画布类…

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器,只需要以下几步: 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit,即可退…

深度学习笔记(九)——tf模型导出保存、模型加载、常用模型导出tflite、权重量化、模型部署

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 本篇博客主要是工具性介绍,可能由于软件版本问题导致的部分内容无法使用。 首先介绍tflite: TensorFlow Lite 是一组工具,可帮助开…