拌合楼管理系统(十六)c#如何实现点击同时启动两个窗体,并且窗体全部关闭后才退出程序

前言:

        好长时间没有再写博文了,最近项目有个需求,无人值守程序需要一个client端,主要实现两个功能,一个是显示安装的四个监控的画面,一个是显示地磅称重数量和车牌列表等一些信息。今天主要解决如何显示两个窗体,并且让窗体显示在屏幕右侧。


一、最终达到的效果:

        两个窗体,运行程序后显示在屏幕靠右侧位置,且过磅信息的窗口在监控画面窗口的下面。并且两个窗口全部关闭后,整个程序才退出来。

二、代码实现

        1. 创建两个窗体

        这个操作so easy,就不在这里演示了,我创建的就一个Form1,一个Form2

       2.  设置窗体的启动位置

        这一步很关键,我发现很多代码都没有提到,最后接过就是你后面怎么跑,窗体显示的位置都没有按照你的逻辑的来。

        这里StartPosition一定要改成  Manual, 默认是WindowsDefaultLocation

        3.  创建一个类继承ApplicationContext

        在类的构造函数中定义窗体启动所在的位置,Form1作为监控视频窗体,右端靠近屏幕右边,那么Form1的location 的x坐标就是  屏幕的宽度 -  Form1的窗体宽度。 Y我给他赋值为10,不用顶着上边就好。 对Form2 它的x坐标和Form1一样,他Y坐标就应该是  Form1的Y坐标 +  From1的高度,同样为了不让Form2和Form1 太贴近,我也给了10的宽度,Form2的Y坐标就是  Form1的高度+ 20  具体代码如下:        

            Screen[] sc = Screen.AllScreens;Form2  f2 = new Form2();    Form1 f1 = new Form1();f1.Location = new Point(sc[1].WorkingArea.Width - f1.Width,10);f2.Location = new Point(f1.Location.X,  f1.Height + 20);f1.Show();f2.Show();

        第一行代码获取电脑所有的屏幕,第一屏就是 sc[1] , 目前暂时没有多屏幕显示的需求,如果有后面再完善代码。

        4.  定义处理窗体关闭的事件处理过程                

   private void onFormClose(object sender, EventArgs e) {if (Application.OpenForms.Count == 0) { ExitThread();}}

        逻辑很简单,检测到当前没有打开的窗体,那么才关闭进程。 注意这里我走了些弯路,以为回自动触发,实际上还需要在构造函数进行事件和过程的关联才可以生效。

    f1.FormClosed += onFormClose;f2.FormClosed += onFormClose;

        5. 修改Program中的启动类

   Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new MyWindow());

三、完整的代码        

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace TwoWindowsTest
{internal   class MyWindow:ApplicationContext{public MyWindow() {Screen[] sc = Screen.AllScreens;Form2  f2 = new Form2();    Form1 f1 = new Form1();f1.Location = new Point(sc[1].WorkingArea.Width - f1.Width,10);f2.Location = new Point(f1.Location.X,  f1.Height + 20);f1.Show();f2.Show();f1.FormClosed += onFormClose;f2.FormClosed += onFormClose;}private void onFormClose(object sender, EventArgs e) {if (Application.OpenForms.Count == 0) { ExitThread();}}}
}
namespace TwoWindowsTest
{internal static class Program{/// <summary>///  The main entry point for the application./// </summary>[STAThread]static void Main(){// To customize application configuration such as set high DPI settings or default font,// see https://aka.ms/applicationconfiguration.//  ApplicationConfiguration.Initialize();Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new MyWindow());}}
}

总结:

        功能实现的代码并不复杂,主要是窗体定位的逻辑和一些细节问题的注意了。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作&#xff0c;今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作&#xff0c;有助于更换理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

【目标检测】DEtection TRansformer (DETR)

一、前言 论文&#xff1a; End-to-End Object Detection with Transformers 作者&#xff1a; Facebook AI 代码&#xff1a; DEtection TRansformer (DETR) 特点&#xff1a; 无proposal&#xff08;R-CNN系列&#xff09;、无anchor&#xff08;YOLO系列&#xff09;、无NM…

从一到无穷大 #25 DataFusion:可嵌入,可扩展的模块化工业级计算引擎实现

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言架构总览与可扩展性Catalog and Data SourcesFront End逻辑计划与逻辑计划优化器…

美国零售媒体(广告业)指南:快速增长、不断扩展的业态和新兴机遇

Guide to retail media: Rapid growth, expanding formats, and emerging opportunities --- 零售媒体如何通过CTV和其他合作伙伴关系向上发展 原文作者&#xff1a;Sara Lebow | 2024年2月16日 整理编辑&#xff1a;数字化营销工兵 I 2024年5月2日 ​​​​​​​ &#…

Agent AI智能体:如何借助机器学习引领科技新潮流

文章目录 &#x1f4d1;前言一、Agent AI智能体的基本概念二、Agent AI智能体的技术进步2.1 机器学习技术2.2 自适应技术2.3 分布式计算与云计算 三、Agent AI智能体的知识积累3.1 知识图谱3.2 迁移学习 四、Agent AI智能体的挑战与机遇4.1 挑战4.2 机遇 小结 &#x1f4d1;前言…

python学习笔记B-15:序列结构之字典--字典的创建与删除

字典的创建与删除方法&#xff1a; import random #第1种创建方式 d {10:"cat", 20:"dog", 30:"monkey"} print(d) #第2种创建方式 lst1 [10,20,30] lst2["cat","dog","monkey"] d zip(lst1,lst2) print(dict…

DRF解析器源码分析

DRF解析器源码分析 1 解析器 解析请求者发来的数据&#xff08;JSON&#xff09; 使用 request.data 获取请求体中的数据。 这个 reqeust.data 的数据怎么来的呢&#xff1f;其实在drf内部是由解析器&#xff0c;根据请求者传入的数据格式 请求头来进行处理。 drf默认的解…

还在愁自己该学什么编程?适龄标准来啦(6到14岁的同学看过来哦)

文章目录 前言一、6岁以下1.推荐2.软件 二、6至10岁1.推荐2.软件&#xff08;1&#xff09;6-8:Nemo编程——Scratch图形化编程&#xff08;2&#xff09;8-10岁&#xff1a;Scratch编程——Python编程 三、10岁以后1.推荐2.软件&#xff08;1&#xff09;Python&#xff08;2&…

【二等奖水平论文】2024五一数学建模C题22页保奖论文+22页matlab和13页python完整建模代码、可视图表+分解结果等(后续会更新)

一定要点击文末的卡片&#xff0c;那是资料获取的入口&#xff01; 问题分析 2.1 问题一分析 对于问题一&#xff0c;干扰信号分析&#xff0c;分析干扰信号并识别干扰信号的时间区间。首先对数据集进行数据清洗&#xff0c;判断其异常值以及缺失值。利用matlab的find函数判…

力扣刷题第0天:只出现一次的数字

目录 第一部分:题目描述 ​第二部分:题目分析 第三部分:解决方法 3.1思路1: 双指针暴力求解 3.2 思路2&#xff1a;异或运算 第四部分:总结收获 第一部分:题目描述 第二部分:题目分析 由图片分析可得&#xff0c;该题目对算法时间复杂度有一定的要求时间复杂度为O(N)&a…

Linux的Shell脚本详解

本文目录 一、什么是 Shell 脚本文件 &#xff1f;二、编写Shell脚本1. 基本规则2. shell 变量&#xff08;1&#xff09;创建变量&#xff08;2&#xff09;引用变量&#xff08;3&#xff09;删除变量&#xff08;4&#xff09;从键盘读取变量&#xff08;5&#xff09;特殊变…

《QT实用小工具·五十二》文本或窗口炫酷有趣的滚动条——果冻条

1、概述 源码放在文章末尾 该项目实现了文本或窗口纤细的滚动条——果冻条 一个可以像弓弦一样拉出来&#xff0c;并且来回弹动的普通滚动条。 思路为此&#xff0c;但发现实际效果更像条状果冻&#xff0c;并且略有谐音&#xff0c; 故&#xff0c;称之为——“果冻条”&am…

C/C++开发环境配置

配置C/C开发环境 1.下载和配置MinGW-w64 编译器套件 下载地址&#xff1a;https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/ 下载后解压并放至你容易管理的路径下&#xff08;我是将其放在了D盘的一个software的文件中管理&#xff09; 2.…

IBM FlashSystem 5300入门级全闪存存储平台解读

IBM FlashSystem 5300作为一款面向入门级市场的全闪存存储平台&#xff0c;其发布标志着IBM在满足不同规模企业对于高性能、高性价比存储解决方案需求方面迈出了重要一步。以下是从技术角度出发&#xff0c;结合市场对比进行的客观分析&#xff1a; 技术亮点解析 高性能与高密度…

C语言 | Leetcode C语言题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; int minPathSum(int** grid, int gridSize, int* gridColSize) {int rows gridSize, columns gridColSize[0];if (rows 0 || columns 0) {return 0;}int dp[rows][columns];dp[0][0] grid[0][0];for (int i 1; i < rows; i) {dp[i…

启发式搜索算法1 - 最佳优先搜索算法

启发式搜索算法有什么优势&#xff1f; 对于复杂问题的盲目搜索&#xff0c;常用广度优先搜索和深度优先搜索这两种盲目搜索算法&#xff0c;极大极小值和Alpha-beta剪枝算法是在盲目搜索过程中&#xff0c;通过剪枝避开一些不可能的结果&#xff0c;从而提高效率。 如果搜索…

实习面试之算法准备:数学题

目录 1 技巧2 例题2.1 Nim 游戏2.2 石子游戏2.3 灯泡开关 1 技巧 稍加思考&#xff0c;找到规律 2 例题 2.1 Nim 游戏 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。 你们轮流进行自己的回合&#xff0c; 你作为先手 。 每一回合&#xf…

查询每个部门工资最高的员工 sql

在线运行sql语句 CREATE TABLE dept (dno INT PRIMARY KEY AUTO_INCREMENT,dname VARCHAR(50) NOT NULL,dlocal VARCHAR(100) ); CREATE TABLE employee (eno INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(50) NOT NULL,egender CHAR(2),deptno INT NOT NULL,ejob VARCHAR(5…

KindEditor 漏洞:历史与现状

零基础入门学习路线 视频配套资料&国内外网安书籍、文档 网络安全面试题 KindEditor 是一款开源的富文本编辑器&#xff0c;曾广泛应用于各种网站和 CMS 系统。 然而&#xff0c;它也曾曝出多个安全漏洞&#xff0c;对使用它的网站造成安全风险。 历史漏洞&#xff1a; 文…

ROS实操:通信机制的实现

最近闲来无事&#xff0c;打算重温了一下ROS方面的相关知识。先前的学习都是一带而过&#xff0c;发现差不多都忘了&#xff0c;学习的不够深入。因此&#xff0c;在重温的同时&#xff0c;写下了这篇关于ROS通信实操的学习博客。 上一篇博客的链接为&#xff1a;ROS架构的学习…