C#窗体弹出方式总结

一、前言

我们在编写C#窗体form时,尝尝需要使用弹出窗口的方法,去到二级页面去完成一些操作。在C#中提供了form.Show()和form.ShowDialog()两种方式来实现,而他们之间使用有什么区别呢?下面需要我们去了解一下二者的区别。

二、弹出窗口方式

2.1 form.Show弹出窗口

此方法弹出的窗体与父窗体(一级窗体)是属于同一等级的窗体,也就是他们之间可以相互存在、随意切换修改展示;

关闭窗口方法 : this.Close()或者form.Hide();

优点: 不会影响主页面的运行,相互独立可以切换查看数据;

缺点: 如果滥用的话会弹出多个窗口,影响性能;

适用场景: 二级列表的数据展示、详细页面展示...

2.2 form.ShowDialog弹出窗口

此方法弹出的窗口会阻断父窗体(一级窗体)的运行,会置顶到最顶层,其他窗体都不能使用。只有在当前窗口关闭后才能继续执行其他逻辑。

关闭窗口方法 :this.Close()或者form.Hide();

优点: 可以专一的处理当前窗口逻辑,满足单一职责;

缺点: 阻断了其他窗口运行;

适用场景: 查询表单窗口、修改数据详情窗口...

三、代码示例

3.1 基本使用

C# 复制代码
// 假设有一个SonForm的弹出窗口
// 主界面MainForm
private void MainForm_Load(object sender, EventArgs e)
{
   SonForm sonForm = new SonForm();
   sonForm.show();
   //sonForm.ShowDialog();
}
// SonForm弹出窗口
private void MainForm_Close()
{
   // 关闭当前窗口
   this.Close();
}

3.2 关闭页面后获取弹框页面的数据

C# 复制代码
// 假设有一个SonForm的弹出窗口
// 主界面MainForm
private String currentSql = "";
private void MainForm_Load(object sender, EventArgs e)
{
   SonForm sonForm = new SonForm();
   //sonForm.show();
   if (sonForm.ShowDialog().Equals(DialogResult.OK))
   {
     // 调用SonForm弹出窗口暴露出来的方法
     currentSql = sonForm.GetDataInfo();
   }
}

// SonForm弹出窗口
private String currentSql = "";
// 确认逻辑后关闭当前窗口
private void MainForm_Confirm()
{
   // 设置DialogResult为OK,返回主界面时可以根据这个判断
   this.DialogResult = System.Windows.Forms.DialogResult.OK;
    // 关闭当前窗口
   this.Close();
}
// 暴露出来的方法,获取数据
public string GetDataInfo()
{
    return currentSql;
}

3.3 弹出提示窗口

C# 复制代码
if (MessageBox.Show("确认删除?", "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
{
	return;
}
相关推荐
灿飞屋7 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
xiaoye-duck7 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
总要学点什么8 小时前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
田甲8 小时前
做一款 Type-C 母座读卡器:GL3224 双卡方案实测
c语言·开发语言
严肃小白兔9 小时前
MATLAB 绘图与科研论文插图制作:图形设计、统计表达与矢量导出
开发语言·matlab·科研绘图
Funlang10 小时前
给机器写的 JavaScript 造个笼子
开发语言·javascript·ecmascript
普通人610 小时前
PHP文件读写完全指南
开发语言·php·1024程序员节
坤坤子吖11 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢12 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
xiaoye-duck12 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型