C# Winform编程(4)多文档窗口(MDI)

news/2024/12/30 2:52:54/

多文档窗口(MDI)

  • 创建多文档窗口
  • 利用窗体参数定义进行传值
  • 避免重复打开同一个子窗口
  • 通过类属性进行数据传值

创建多文档窗口

添加菜单,IsMdiContainer设为True:
在这里插入图片描述
From窗口添加菜单
在这里插入图片描述

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 多文档界面MDI
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}private void 视频ToolStripMenuItem_Click(object sender, EventArgs e){}private void 编辑ToolStripMenuItem_Click(object sender, EventArgs e){}private void 窗口ToolStripMenuItem_Click(object sender, EventArgs e){//MessageBox.Show("窗口被单击", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}private void 子窗口2ToolStripMenuItem_Click(object sender, EventArgs e){Form2 Mdichild = new Form2();Mdichild.MdiParent = this;Mdichild.Show();}private void 子窗口3ToolStripMenuItem_Click(object sender, EventArgs e){}private void 窗口层叠ToolStripMenuItem_Click(object sender, EventArgs e){this.LayoutMdi(MdiLayout.Cascade);}private void 水平平铺ToolStripMenuItem_Click(object sender, EventArgs e){this.LayoutMdi(MdiLayout.TileHorizontal);}private void 垂直平铺ToolStripMenuItem_Click(object sender, EventArgs e){this.LayoutMdi(MdiLayout.TileVertical);}}
}

在这里插入图片描述

利用窗体参数定义进行传值

  • 添加Form3 构造函数定义相关参数public Form3(string varName, string varEmail)
  • 在Form2里创建Form3实例并传入参数,在Form3里接收处理相关参数

Form3.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 多文档界面MDI
{public partial class Form3 : Form{// 定义私有变量private string _name;private string _email;// Form3 定义相关参数public Form3(string varName, string varEmail){InitializeComponent();this._name = varName;this._email = varEmail;listBox1.Items.Add(this._name);listBox1.Items.Add(this._email);}private void Form3_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){//MessageBox.Show("感谢使用!");Form2 form2 = new Form2();form2.MdiParent = this.MdiParent; // 设置Form2受MDI控制form2.Show();this.Close();}}
}

Form2 .cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 多文档界面MDI
{public partial class Form2 : Form{public Form2(){InitializeComponent();}private void Form2_Load(object sender, EventArgs e){textBox1.Text = "";textBox1.Focus();}private void button1_Click(object sender, EventArgs e){if (textBox1.Text == "" || textBox2.Text == ""){MessageBox.Show("姓名或邮箱不能为空!", "信息提示");}else{this.Hide();Form3 childForm3 = new Form3(this.textBox1.Text, this.textBox2.Text);childForm3.MdiParent = this.MdiParent; // 设置Form3受MDI控制childForm3.Show();}}private void button2_Click(object sender, EventArgs e){}}
}

避免重复打开同一个子窗口

 private void 子窗口2ToolStripMenuItem_Click(object sender, EventArgs e){// 检查是否已经打开了此MDI窗体foreach (Form childrenForm in this.MdiChildren){// 检查是不是当前子窗体名称Console.WriteLine("Name:", childrenForm.Name);if (childrenForm.Name == "Form2"){// 是则显示,并激活该窗体childrenForm.Visible = true;childrenForm.Activate();return;}}// 打开子窗体Form2 Mdichild = new Form2();Mdichild.MdiParent = this;Mdichild.Show();}

通过类属性进行数据传值

Form4.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 多文档界面MDI
{public partial class Form4 : Form{public Form4(){InitializeComponent();}private string _name, email_address, topic, option;public string Name{get {return _name;}set {_name = value;}}public string EmailAddress{get {return email_address;}set{ email_address = value;}}public string Topic{get { return topic; }set { topic = value; }}public string Option{get { return option; }set { option = value; }}private void Form4_Load(object sender, EventArgs e){listBox1.Items.Add(_name);listBox1.Items.Add(email_address);listBox1.Items.Add(topic);listBox1.Items.Add(option);}}
}

创建窗口Form4实例并设置参数值

private void button3_Click(object sender, EventArgs e)
{if (textBox1.Text == "" || textBox2.Text == ""){MessageBox.Show("姓名或邮箱不能为空", "信息提示");}else{this.Hide();Form4 childForm4 = new Form4();childForm4.Name = textBox1.Text;childForm4.EmailAddress = textBox2.Text;childForm4.Topic = "Topic a";childForm4.Option = "Option a";childForm4.MdiParent = this.MdiParent;childForm4.Show();}}

http://www.ppmy.cn/news/1159875.html

相关文章

mysql binlog日志详解及主从复制原理

什么是mysql binlog MySQL 的二进制日志可以说 MySQL 最重要的日志了,它记录了所有的 DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。 ➢mysql DDL MySQL DDL(Data Definition Language)是用于定义、…

【Java 进阶篇】深入理解 JavaScript DOM Node 对象

在前端开发中,与HTML文档进行交互是一项基本任务。文档对象模型(Document Object Model,简称DOM)为开发者提供了一种以编程方式访问和操作HTML文档的方式。DOM的核心是节点(Node)对象,它代表了文…

【LeetCode热题100】--287.寻找重复数

287.寻找重复数 方法:使用快慢指针 使用环形链表II的方法解题(142.环形链表II),使用 142 题的思想来解决此题的关键是要理解如何将输入的数组看作为链表。 首先明确前提,整数的数组 nums 中的数字范围是 [1,n]。考虑一…

C语言笔记之指针

一.指针含义 1.a、*a与&a的区别 a存储指向变量的地址,*a为指针的值,&a为指针的地址 #include <stdio.h>int main(){/** 测试代码部分一 **/int a12;int *b1;b1&a1;printf(" a1 %d, &a1 %d, b1 %d, *b1 %d, &b1 %d\n\n",a1,&a1…

基于Spring Boot的LDAP开发全教程

写在前面 协议概述 LDAP&#xff08;轻量级目录访问协议&#xff0c;Lightweight Directory Access Protocol)是一种用于访问和维护分布式目录服务的开放标准协议,是一种基于TCP/IP协议的客户端-服务器协议&#xff0c;用于访问和管理分布式目录服务&#xff0c;如企业内部的…

新版外国人永居证身份证读卡器C++开发SDK接口

近期&#xff0c;国家移民管理局对外国人永久居留身份证&#xff08;以下简称永居证&#xff09;进行了升级改造和便利化应用工作&#xff0c;新版永居证将于 2023年 12 月 1 日起正式签发。新版永居证调整了号码规则&#xff0c;改进了信 息储存&#xff0c;优化了图案设计&am…

Selenium - 自动化测试框架

Selenium 介绍 Selenium 是目前用的最广泛的 Web UI 自动化测试框架&#xff0c;核心功能就是可以在多个浏览器上进行自动化测试&#xff0c;支持多种编程语言&#xff0c;目前已经被 google&#xff0c;百度&#xff0c;腾讯等公司广泛使用。 开发步骤 1、配置 google 驱动…

网络工程师知识点5

71、什么是FTP&#xff1f; FTP是文件传输协议。 FTP传输数据时支持两种传输模式&#xff1a;ASCII模式和二进制模式。 需要TCP的21号端口来建立控制连接 需要TCP的20号端口来建立数据连接 72、什么是telnet&#xff1f; Telnet提供了一个交互式操作界面&#xff0c;允许终端远…