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

7.8 窗体间传递数据

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的

当项目中有多个窗体时(在本节中为两个窗体:Form1和Form2),窗体间传递数据有以下几种方法。

7.8.1 在公共类中定义公共变量

VB.Net中可以在模块中定义全局变量作为整个项目的变量,但是在C#中没有模块概念,只能考虑使用公共类的公共变量。

【例 7.5【项目:code7-005】通过公共类的公共变量传递数据。

通过菜单【项目】|【添加模块】,或者右击【解决方案资源管理器】项目名称,在弹出菜单中单击【添加】|【类】。在【添加新项】窗口中使用默认的模块名称“Class1.cs”,单击【添加】按钮。

在Class1.cs的代码中定义:

static public string passParameter;

在Form1中增加一个Button控件,在Form2上增加一个Label控件。

Form1中的代码:

        private void button1_Click(object sender, EventArgs e)

        {

            //设置公共变量的值

            Class1.passParameter = "公共变量";

            //定义Form2类型

            Form2  frm2 = new Form2();

            //显示Form2

            frm2.ShowDialog();

        }

Form2中的代码:

        private void Form2_Load(object sender, EventArgs e)

        {

            label1.Text = Class1.passParameter;

        }

运行结果如下图所示:

图7-15 Form2上显示字符串

7.8.2 Form1中的数据传递到Form2方法1

【例 7.6【项目:code7-006】修改Form2的构造函数传递数据。

在Form2的代码中找到构造函数:

        public Form2()

        {

            InitializeComponent();

     }

在Form2后面的括号内输入:

string passParameter

这就是我们需要传递的参数。

增加一个窗体级的变量,同时完善代码。修改后的代码如下:

        string passedParameter;

        public Form2(string passParameter)

        {

            InitializeComponent();

            this.passedParameter = passParameter;

     }

注意:不能删除 InitializeComponent(),否则会影响窗口的设计,只需要在InitializeComponent()后面增加代码即可。

在Form2上增加一个label控件,同时修改Form2_Load事件代码:

        private void Form2_Load(object sender, EventArgs e)

        {

            label1.Text = passedParameter;

        }

Form1中设置按钮按下事件的代码:

        private void button1_Click(object sender, EventArgs e)

        {

            Form2 frmNew = new Form2("这是Form1传递给Form2的字符串");

            frmNew.ShowDialog();

        }

运行结果如下图所示:

图7-16 在Form2窗体上显示传递的数据

7.8.3 Form1中的数据传递到Form2方法2

【例 7.7【项目:code7-007】修改Form2中变量的访问级别。

先在Form2中定义一个Public级别变量,然后在Form1中定义(实例化)Form2后,就可以使用这个变量了。

Form2中的代码:

        public string passedParameter;

        private void Form2_Load(object sender, EventArgs e)

        {

            label1.Text = passedParameter;

        }

Form1中的代码:

        private void button1_Click(object sender, EventArgs e)

        {

            Form2  frmNew=new Form2();

            frmNew.passedParameter = "这是Form1传递给Form2的字符串";

            frmNew.ShowDialog();

        }

运行结果同【例 7.7】。

7.8.4 Form2中的数据传递回Form1方法1

【例 7.8【项目:code7-008】定义Form1类型的项目公共变量。

将Program.cs中的代码修改为:

        public static Form1 newForm1;

        [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            newForm1 = new Form1();

            Application.Run(newForm1);

        }

在Form1中添加1个Label控件和2个Button控件,在Form2中添加1个Button,名称均使用默认名称。

Form1中的代码如下:

public string passedWords;

        private void button1_Click(object sender, EventArgs e)

        {

            Form2 newForm2 = new Form2() ;

            newForm2.ShowDialog();

        }

        private void button2_Click(object sender, EventArgs e)

        {

            label1.Text = passedWords;

        }

在Form2中加入一个按钮,按钮单击代码:

        private void button1_Click(object sender, EventArgs e)

        {

            Program.newForm1.passedWords = "这是Form2传递回Form1的字符串";

            this.Close();

        }

由于Program.newForm1是公共变量,因此在Form2中可以调用它。

点击Form1上的Button1,出现Form2,在点击Form2上的Button1,此时将TextBox1中的文本传递给了Form1的变量passedWords,同时Form2关闭。然后单击Form1上的Button2,Label1的文本将变为变量passedWords的内容。

图7-19 在Form1窗体上显示传回的数据

如果仅仅是为了修改Form1上Label1的文本,可以将Form1.Designer.cs中的代码

private System.Windows.Forms.Label label1;

修改为:

public System.Windows.Forms.Label label1;

然后直接在Form2的Button1按下事件中使用如下代码:

        private void button1_Click(object sender, EventArgs e)

        {

            Program.newForm1.label1.Text = "这是Form2传递回Form1的字符串";

            this.Close();

        }

7.8.5 Form2中的数据传递回Form1方法2

【例 7.9【项目:code7-009】使用窗体的Owner属性。

在Form1中添加1个Label控件和1个Button控件,在Form2中添加1个Button,名称均使用默认名称。

将Form1.Designer.cs中的代码

private System.Windows.Forms.Label label1;

修改为:

public System.Windows.Forms.Label label1;

Form1中的代码如下:

    public string passedWords;

        private void button1_Click(object sender, EventArgs e)

        {

            Form2 newForm2 = new Form2();

            //Form1(Me)设置为Form2的所有者

            newForm2.ShowDialog(this);

        }

        private void button2_Click(object sender, EventArgs e)

        {

            label1.Text = passedWords;

        }

Form2中的代码如下:

        private void button1_Click(object sender, EventArgs e)

        {

            Form1 frm;

            //通过Form2的所有者获得Form1

            frm = (Form1)this.Owner;

            frm.label1.Text = "这是Form2传递回label1的字符串";

            frm.passedWords = "这是Form2传递回passedWords的字符串";

            this.Close();

     }

运行结果如下图所示:

图7-20 在Form1窗体上显示传回的数据

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

相关文章:

7.8 窗体间传递数据

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 当项目中有多个窗体时(在本节中为两个窗体:Form1和Form2),窗体间传递数据有以下几种方…...

一文了解 MCP Server:AI 工具与外部世界的桥梁

引言 随着大语言模型(LLM)的普及与 AI Agent 的爆发,Anthropic 于 2024 年底提出并开源的 Model Context Protocol(MCP,模型上下文协议)成为构建智能体系统的关键基石之一。本文将结合最新的实战经验&#…...

【redis】集群 数据分片算法:哈希求余、一致性哈希、哈希槽分区算法

文章目录 什么是集群数据分片算法哈希求余分片搬运 一致性哈希扩容 哈希槽分区算法扩容相关问题 什么是集群 广义的集群,只要你是多个机器,构成了分布式系统,都可以称为是一个“集群” 前面的“主从结构”和“哨兵模式”可以称为是“广义的…...

基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】

网上订餐系统是一个基于Java语言和Spring Boot框架开发的Web应用,旨在为用户和管理员提供一个便捷的订餐平台。该系统通过简化餐饮订购和管理流程,为用户提供快速、高效的在线订餐体验,同时也为管理员提供完善的后台管理功能,帮助…...

Redis常见面试问题汇总

Redis 面试笔记整理 一、Redis 基础知识1. Redis 概述Redis 是什么?主要特点有哪些?Redis 和 Memcached 的区别是什么?Redis 是单线程还是多线程?为什么单线程还能高效?Redis 6.0 之后的多线程模型是怎样的&#xff1f…...

【redis】集群 如何搭建集群详解

文章目录 集群搭建1. 创建目录和配置2. 编写 docker-compose.yml完整配置文件 3. 启动容器4. 构建集群超时 集群搭建 基于 docker 在我们云服务器上搭建出一个 redis 集群出来 当前节点,主要是因为我们只有一个云服务器,搞分布式系统,就比较…...

NLP高频面试题(二十)——flash attention原理

FlashAttention是一种针对Transformer模型中自注意力机制的优化算法,旨在提高计算效率并降低内存占用,特别适用于处理长序列任务。 在Transformer架构中,自注意力机制的计算复杂度和内存需求随着序列长度的平方增长。这意味着当处理较长序列时…...

飞牛NAS本地部署小雅Alist结合内网穿透实现跨地域远程在线访问观影

文章目录 前言1. VMware安装飞牛云(fnOS)1.1 打开VMware创建虚拟机1.3 初始化系统 2. 飞牛云搭建小雅Alist3. 公网远程访问小雅Alist3.1 安装Cpolar内网穿透3.2 创建远程连接公网地址 4. 固定Alist小雅公网地址 前言 嘿,小伙伴们&#xff0c…...

Episode, time step, batch, epoch

1. Episode(回合) 回合(episode)表示智能体从开始执行任务到完成任务(例如成功到达目标或触发失败条件)的全过程。 例如,如果我们训练一个四足机器人走到一个目标点,一个回合就是从…...

Linux版本控制器Git【Ubuntu系统】

文章目录 **前言**一、版本控制器二、Git 简史三、安装 Git四、 在 Gitee/Github 创建项目五、三板斧1、git add 命令2、git commit 命令3、git push 命令 六、其他1、git pull 命令2、git log 命令3、git reflog 命令4、git stash 命令 七、.ignore 文件1、为什么使用 .gitign…...

browser-use 库网页元素点击测试工具

目录 代码代码解释输出结果 代码 import asyncio import jsonfrom browser_use.browser.browser import Browser, BrowserConfig from browser_use.dom.views import DOMBaseNode, DOMElementNode, DOMTextNode from browser_use.utils import time_execution_syncclass Eleme…...

Vue 中使用 ECharts

在 Vue 中使用 ECharts 主要分为以下步骤,结合代码示例详细说明: 1. 安装 ECharts 通过 npm 或 yarn 安装 ECharts: npm install echarts --save # 或 yarn add echarts2. 基础使用(完整引入) 在 Vue 组件中使用 &…...

Spring AI + DeepSeek 构建大模型应用 Demo

Spring AI + DeepSeek 构建大模型应用 Demo 下面我将展示如何使用 Spring AI 框架结合 DeepSeek 的大模型能力构建一个简单的 AI 应用。 1. 环境准备 首先确保你已安装: JDK 17+Maven 3.6+Spring Boot 3.2+2. 创建 Spring Boot 项目 使用 Spring Initializr 创建项目,添加…...

解决GitLab无法拉取项目

1、验证 SSH 密钥是否已生成 ls ~/.ssh/ 如果看到类似 id_rsa 和 id_rsa.pub 的文件,则说明已存在 SSH 密钥。 避免麻烦,铲掉重来最方便。 如果没有,请生成新的 SSH 密钥: ssh-keygen -t rsa -b 4096 -C "your_emailexam…...

POSIX 线程取消与资源清理完全指南

POSIX 线程取消与资源清理完全指南 引言:为什么需要线程取消机制? 在多线程编程中,优雅地终止线程并确保资源释放是开发者面临的重要挑战。直接终止线程可能导致内存泄漏、文件未关闭等问题。POSIX 线程库提供了一套完整的线程取消和清理机…...

FPGA学习篇——Verilog学习之寄存器的实现

1 寄存器理论 这里在常见的寄存器种加了一个复位信号sys_rst_n。(_n后缀表示复位信号低电平有效,无这个后缀的则表示高电平有效) 这里规定在时钟的上升沿有效,只有当时钟的上升沿来临时,输出out 才会改变,…...

Cursor异常问题全解析-无限使用

title: Cursor异常问题全解析无限使用 tags: cursor categories:aiai编程 mathjax: true description: Cursor异常问题全解析与解决方案大全 abbrlink: 64908bd0 date: 2025-03-19 14:48:32 🤖 Assistant 🚨 Cursor异常问题全解析与解决方案大全 &…...

【VUE】ant design vue实现表格table上下拖拽排序

适合版本&#xff1a;ant design vue 1.7.8 实现效果&#xff1a; 代码&#xff1a; <template><div class"table-container"><a-table:columns"columns":dataSource"tableData":rowKey"record > record.id":row…...

Vue实现动态数据透视表(交叉表)

需求:需要根据前端选择的横维度、竖维度、值去生成一个动态的表格&#xff0c;然后把交叉的值放入到对应的横维度和竖维度之下&#xff0c;其实就是excel里面的数据透视表功能&#xff0c;查询交叉语句为sql语句。 实现页面&#xff1a; 选择一下横维度、竖维度、值之后点击查…...

推荐《人工智能算法》卷1、卷2和卷3 合集3本书(附pdf电子书下载)

今天&#xff0c;咱们就一同深入探讨人工智能算法的卷1、卷2和卷3&#xff0c;看看它们各自蕴含着怎样的奥秘&#xff0c;并且附上各自的pdf电子版免费下载地址。 《人工智能算法&#xff08;卷1&#xff09;&#xff1a;基础算法》 下载地址&#xff1a;https://www.panziye…...

元宇宙浪潮下,数字孪生如何“乘风破浪”?

在当今科技飞速发展的时代&#xff0c;元宇宙的概念如同一颗璀璨的新星&#xff0c;吸引了全球的目光。元宇宙被描绘为一个平行于现实世界、又与现实世界相互影响且始终在线的虚拟空间&#xff0c;它整合了多种前沿技术&#xff0c;为人们带来沉浸式的交互体验。而数字孪生&…...

WPF 附加属性

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;附加属性&#xff08;Attached Properties&#xff09;是一种特殊的依赖属性机制&#xff0c;它允许父元素为子元素提供额外的属性支持。这种特性特别适用于布局系统、输入处理和其他需要跨多个控件…...

数据分析 之 怎么看懂图 一

韦恩图怎么看 ①颜色:不同颜色代表不同的集合 ②)颜色重叠部分:表示相交集合共有的元素 ③颜色不重叠的部分:表示改集合独有的元素 ④数字:表示集合独有或共有的元素数量 ⑤百分比:表示该区域元素数占整体的比例 PCA图怎么看 ① 第一主成分坐标轴及主成分贡献率主成分贡献…...

手写数据库MYDB(一):项目启动效果展示和环境配置问题说明

1.项目概况 这个项目实际上就是一个轮子项目&#xff0c;现在我看到的这个市面上面比较火的就是这个首先RPC&#xff0c;好多的机构都在搞这个&#xff0c;还有这个消息队列之类的&#xff0c;但是这个是基于MYSQL的&#xff0c;我们知道这个MYSQL在八股盛宴里面是重点考察对象…...

深入理解椭圆曲线密码学(ECC)与区块链加密

椭圆曲线密码学&#xff08;ECC&#xff09;在现代加密技术中扮演着至关重要的角色&#xff0c;广泛应用于区块链、数字货币、数字签名等领域。由于其在提供高安全性和高效率上的优势&#xff0c;椭圆曲线密码学成为了数字加密的核心技术之一。本文将详细介绍椭圆曲线的基本原理…...

使用 PowerShell 脚本 + FFmpeg 在 Windows 系统中批量计算 MP4视频 文件的总时长

步骤 1&#xff1a;安装 FFmpeg 访问 FFmpeg 官网(Download FFmpeg)&#xff0c;下载 Windows 版编译包&#xff08;如 ffmpeg-release-full.7z&#xff09;。或者到&#xff08;https://download.csdn.net/download/zjx2388/90539014&#xff09;下载完整资料 解压文件&#…...

中医气血精津辨证

中医气血精津辨证 一、气血精津辨证概述 基本概念&#xff1a; 气血精津是构成人体和维持生命活动的基本物质&#xff0c;其生成、运行、输布与脏腑功能密切相关。辨证核心&#xff1a;通过分析气血精津的盛衰、运行障碍及其相互关系&#xff0c;判断疾病本质。 生理关系&…...

Intellij IDEA2023 创建java web项目

Intellij IDEA2023 创建java web项目 零基础搭建web项目1、创建java项目2、创建web项目3、创建测试页面4、配置tomcat5、遇到的问题 零基础搭建web项目 小白一枚&#xff0c;零基础学习基于springMVC的web项目开发&#xff0c;记录开发过程以及中间遇到的问题。已经安装了Inte…...

Scrapy结合Selenium实现滚动翻页数据采集

引言 在当今的互联网数据采集领域&#xff0c;许多网站采用动态加载技术&#xff08;如AJAX、无限滚动&#xff09;来优化用户体验。传统的基于Requests或Scrapy的爬虫难以直接获取动态渲染的数据&#xff0c;而Selenium可以模拟浏览器行为&#xff0c;实现滚动翻页和动态内容…...

Node.js从0.5到1学习计划

以下是针对零基础学习者的10天Node.js高效学习计划&#xff0c;每天聚焦核心知识点并配合实战练习&#xff1a; &#x1f4c6; 10天Node.js速成计划&#xff08;每日4-6小时&#xff09; 核心目标&#xff1a;掌握Node.js核心机制 完成3个实战项目 &#x1f4cd; Day 1-2&…...