C# 弹出子窗口同时关闭主窗口

2024-02-11 08:08

本文主要是介绍C# 弹出子窗口同时关闭主窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这方面有过困惑,然后自己总结了一下。仅供参考,欢迎交流!

 


方法一:[实现从logInForm传值到MainForm,且点LogIn出现MainForm的同时把LogInForm关掉]
在Program.cs里:
static   void   Main(string[]   args)  
  {  
   
  LoginForm   lf   =   new   LoginForm();  
  if(lf.ShowDialog()   ==   DialogResult.OK)  
    {  
     Application.Run(new   MainForm());//打开你指定的窗口   
    }  
  }  
在登录窗口(LoginForm)中  
的LogIn按钮事件里加上
 this.DialogResult=DialogResult.OK;   即可

//---------------------------------------------------------------------------------------

方法二:[实现从logInForm传值到MainForm,且点LogIn出现MainForm的同时把LogInForm关掉]

在MainForm上添加一个名为txtMainForm的textBox
在LogInForm上添加一个名为txtLogInForm的textBox,和一个名为LogIn的Button

一).启动MainForm
  static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        } 

二).在LogInForm里添加一个公共属性用于传值:
 public partial class LogInForm : Form
    {
        private string valueSend = "";         //添加成员变量
        public string ValueSend                //添加属性
        {
            get { return valueSend; }
        }

        private void LogIn_Click(object sender, EventArgs e)      //点击LogIn Button触发
        {
            valueSend = this.txtLogInForm.Text.Trim();   //设属性的值为LogInForm的txtLogInForm输

入的值
            this.Close();                                //关掉LogInForm
            this.DialogResult = DialogResult.OK;  
        }
    }


三).在MainForm里
 在MainForm的Load事件中写如下代码[用于在MainForm Show出来前把LogInForm的值收到且主LogInForm关闭]
 private void MainForm_Load(object sender, EventArgs e) 
        {
            LogInForm lf = new LogInForm();      //在MainForm Show出来前,先把LogInForm

Show出来
            if (lf.ShowDialog() == DialogResult.OK)
            {
                this.txtMainForm.Text = lf.ValueSend;   //MainForm的textBox用于接收来自LogInForm

的textBox输入的值.
            }
        }

大功告成,主要用到了属性来传值,用Form_Load在Form_Show前的特点实现了关闭LogInForm的同时把MainForm

Show出来了.

 

//---------------------------------------------------------------------------------------

方法三:[实现从logInForm传值到MainForm,且点LogIn出现MainForm的同时把LogInForm关掉]
这方法是在学线程的时候意外发现的.相对比较简单,也好理解.

在主form即Form1上的button1里新建一线程,如下:
 private void btnThread1_Click(object sender, EventArgs e)
        {
            Thread threadOne = new Thread(new ThreadStart(FirstMethod));
            threadOne.Start();
        }

然后写委托函数:
//这是因为:
        // ThreadStart是.Net Framework定义的委托类型,即:public delegate void ThreadStart();
        public void FirstMethod()     //
        {
            Form2 fm2 = new Form2();
            fm2.ShowDialog();
        }

就这么简单就完了,你对Form1[主线程]做任何操作都将不会影响到Form2上的东西(当然也包括关闭Form1).

如果你说:我不按button或别的,我就需要在关闭Form1的同时弹出Form2呢?
换位一下思维就能知道了,把button事件里的代码写在Form1的FormClosed()里不就可以了.
即:
 private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Thread threadTwo = new Thread(new ThreadStart(FirstMethod));
            threadTwo.Start();
        }
        public void FirstMethod()
        {

            Form2 fm2 = new Form2();
            fm2.ShowDialog();
        }

//---------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 


 

这篇关于C# 弹出子窗口同时关闭主窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699296

相关文章

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,