C# 弹出窗口show()和showdialog()的两种方式
作者:火星papa 发布时间:2022-05-08 17:12:36
标签:C#,弹出窗口,show(),showdialog()
我们在构建C# Form窗口的时候经常需要到弹出新的窗口,那么接着就会如何弹出窗口的疑问。这里介绍最常见的两种弹窗方法show()和showdialog()。我在VS2019中构建一个简单的工程来讲解让他们之间的区别。大家也可以动手建一个体验他们之间的区别。
form.Show()弹出窗口
这个方法弹出来的窗体和父窗体(上一个窗体)是属于同一等级的窗体,这两个窗体可以同时存在而且可以随意切换。
form.ShowDialog()弹出窗口
showdialog弹出来的窗体就不能这样,它永远是被置顶的,如果不关闭这个窗体,那就不能使用别的窗体,别的窗体都是灰显的。
一、构建工程和界面介绍
首先我们建立两个基本窗口类,如下图,一个是首先会启动的Form主窗口(右边),其次是弹出界面Dialog(左边)。
二 、添加代码
将两个窗口的代码添加到对应的类中。添加的按键单击事件中增加下面的主窗口代码和弹出窗口代码。
(1)主窗口代码:
public Form1()
{
InitializeComponent();
}
//实例化窗口类
Dialog _dlg = new Dialog();
private void button_show_Click(object sender, EventArgs e)
{
_dlg.Show();//显示
}
private void button_hide_Click(object sender, EventArgs e)
{
_dlg.Hide();//隐藏
}
private void button_showDialog_Click(object sender, EventArgs e)
{
//实例化窗口类
Dialog _dialog = new Dialog();
//弹出对话框
_dialog.ShowDialog();
}
(2)弹出窗口代码:
public Dialog()
{
InitializeComponent();
}
private void button_ok_Click(object sender, EventArgs e)
{
//指定返回结果
this.DialogResult = DialogResult.OK;
//关闭
this.Close();
}
private void button_cancel_Click(object sender, EventArgs e)
{
//指定返回结果
this.DialogResult = DialogResult.Cancel;
//关闭
this.Close();
}
private void hide_Click(object sender, EventArgs e)
{
//隐藏
this.Hide();
}
三、验证效果和小结
我们可以看到这些Show()方法和ShowDialog()方法都可以弹出我们想要的窗口,但是他们的效果明显不同,可以小结概述为下面几个方面差异。
项目 | Show()方法 | ShowDialog()方法 |
---|---|---|
名称 | 显示控件 | 显示对话框 |
关闭的对应方法 | Hide() 隐藏控件 | Close()关闭窗体 |
编辑显示效果 | 和主窗口平级,弹出子窗口后,两者可以任意切换到顶层和编辑。 | 比主窗口优先级高,弹出编辑子窗口只能编辑子窗口,子窗口独占顶层,只有关闭(close)返回后,用户才可以编辑主窗口。 |
理模显示理解 | 显示或隐藏控件,隐藏时并没有关闭,只是看不见,还存在。 | 打开等待关闭的对话框,打开就存在,关闭就清除,和messageBox类似,关闭等同于右上角的叉叉(×)。 |
重点:Show()和Hide() 是一对,ShowDialog()和Close()是一对。 请一一对应,不能混用的哦。
来源:https://blog.csdn.net/weixin_45023644/article/details/125639125


猜你喜欢
- 不需要AIDL也不需要复杂的ContentProvider,也不需要SharedPreferences或者共享存储文件!只需要简单易懂的Me
- Mybatis的缓存mybatis是一个查询数据库的封装框架,主要是封装提供灵活的增删改sql,开发中,service层能够通过mybati
- 效果:代码:XmlDocument xml = new XmlDocument(); &nbs
- DownloadManager三大组件介绍DownloadManager类似于下载队列,管理所有当前正在下载或者等待下载的项目;他可以维持
- 一、# List泛型集合集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一。为什么要用泛型集合?在C# 2.0之前,主
- 一、本地仓库初始化与远程仓库推送操作Idea 基本环境配置Github 配置Git 执行文件目录指定创建工程git02创建本地仓库并提交项目
- AspectJ简介它不属于spring;AspectJ是一个AOP的框架;定义了AOP语法;有一个专门的编译器用来生成遵守Java字节编码规
- 本文实例为大家分享了C#十五子游戏的具体代码,供大家参考,具体内容如下using System;using System.Collectio
- 什么是EJB?EJB 是 Java 企业Bean, 是JavaEE服务端 企业组件模型,它的设计目标与核心应用是部署分布式应用程序。话不多说
- 本节作为主要讲解Spring Data的环境搭建JPA Spring Data :致力于减少数据访问层(DAO)的开发量。开发者唯一要做的就
- 之前碰到个问题,使用webview的时候无法定位,最近19大没法墙,只能去百度逛逛,发现有人说要这么做 WebSe
- 线程的作用和意义线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程
- 今天在研究dubbo时,发现一个新的知识点,可以使用javassist包进行动态编程,hibernate也使用该包进行编程。晚上百度了很多资
- webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互。概念性的东西就不说太多,下面开始创建一个简单的webservi
- 前言图文并茂的内容往往让人看起来更加舒服,如果只是文字内容的累加,往往会使读者产生视觉疲劳。搭配精美的文章配图则会使文章内容更加丰富,增加文
- 前几天开发公司项目,有个地方要做一个分数的仪表盘,根据分数跑分,(设计的人估计是看到招商银行App的账号总览)网上好像找不到类似的组件,那就
- RocketMQ生产者发送消息分为三种模式RocketMQ生产者发送消息分为三种模式,分别是同步发送,异步发送和单向发送。单向发送,这个就是
- 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题,不过俺从没看过出错的现象,表鄙视我……public class Singleton
- 在Activity类的子类中直接复写下面三个方法://复写onCreateOptionsMenu()方法,弹出菜单栏
- Collection继承、实现关系如下(说明(I)表示接口, (C)表示Java类,<--表示继承,<<——表示实现):(