Application.Run() 和 Form.ShowDialog() 有什么区别?

2023-11-22

在我的应用程序中,我想首先显示登录表单,如果登录成功则显示主表单。目前我正在做这样的事情:

var A = new LoginForm();
if ( A.ShowDialog() == DialogResult.OK )
    Application.Run(new MainForm());

但后来我开始想知道——这样做的意义何在?Application.Run()?为什么不直接做(new MainForm()).ShowDialog()还有?有什么不同?实现我想要的目标的正确方法是什么?


Application.Run(Form)在当前线程上启动消息循环并显示指定的表单。消息循环使表单能够接收Windows 消息(例如,按键、鼠标单击、绘制失效),以使其表现出响应能力并与用户进行交互。你打电话时ShowDialog() on a Form例如,它实际上做了类似的事情,并为表单创建了一个模态消息循环ShowDialog已被调用。

两次调用没有太大区别。Application.Run确实添加了一些额外的事件处理,使您能够在主窗体关闭时对资源进行一些整理(请参阅应用程序.ThreadExit).

启动 WinForms 应用程序的推荐方法是使用Application.Run,但我怀疑这更多的是一种惯例而不是规则。使用的最大理由Application.Run如果您想打开多个非模式表单。您可以使用以下方法执行此操作:

new Form().Show();
new Form().Show();
Application.Run();

您无法使用以下方法实现此目的ShowDialog()方法作为形式之一必须是模态的。


至于你的问题如何显示登录表单,如果登录成功则显示主表单,我认为你所拥有的很好:

if (new LoginForm().ShowDialog() == DialogResult.OK)
{
    Application.Run(new MainForm());
}

另一种方法是自己进行管道安装并打开一个实例MainForm在闭幕式活动中LoginForm如果登录成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Application.Run() 和 Form.ShowDialog() 有什么区别? 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • AutoMapper 自定义类型转换器不工作

    我在用特洛伊 古德的分页列表在我的 WebApi 中提供分页信息 他的包返回一个 IPgedList 它实现 IEnumerable 但也包含自定义属性 例如 IsLastPage PageNumber PageCount 等 当您尝试从
  • 寻找重复出现的模式

    假设我有一个具有重复模式的数字 即存在一串重复的数字 以便形成有问题的数字 例如 这样的数字可能是1234123412341234 通过重复数字创建1234 我想做的是找到重复自身的模式来创建数字 因此 给定1234123412341234
  • 从 C# 运行 PowerShell 脚本

    我正在尝试使用 Visual Studio 构建图形平台 我不是开发人员 我想在单击按钮时运行 PowerShell 或批处理文件 问题是 当我尝试 C 语法时 即使我安装了 PowerShell 扩展 它也不起作用 我尝试了一些在互联网上
  • 调试Linux内核恐慌

    我是内核调试的新手 下面是最后一条内核消息 根据我的理解 它正在尝试访问空指针 但我不明白为什么它要关闭 cup 0 Unable to handle kernel paging request at virtual address 400
  • 如何使 NSView 透明并显示 NSWindow 下的内容? [复制]

    这个问题在这里已经有答案了 我正在 osx 中制作一个放大镜风格的应用程序来娱乐 但我遇到了一个我似乎找不到答案的障碍 我在 NSWindow 中有一个 NSView 我将视图设置为clearColor 将 alpha 设置为 0 25 但
  • 如何覆盖 4mb API 路由正文大小限制?

    我尝试了多种方法来覆盖 API 路由主体大小限制 https nextjs org docs messages api routes body size limit 设置自定义服务器 基本 Express 应用程序 在相关路由上传递 bod
  • 在R中按时间范围合并两个数据帧

    我正在处理牛的繁殖力数据 在一个表 数据框 中 我记录了一头牛所执行的所有服务 例如授精 在另一个表中 我得到了妊娠诊断 阳性或阴性 两者都有一个唯一的 ID animal id 我的挑战是成功地将两个表合并到正确的数据范围内 这意味着我需
  • 有没有办法使用内存分配报告来分析 ruby​​ 1.9.2 脚本?

    我的 ruby 应用程序遇到了瓶颈 但我不知道它在哪里变慢 我找到了memprof 但它不支持1 9 我还发现 ruby prof 似乎在 1 9 2 上运行良好 但内存分配需要修补 ruby 解释器 并且我只能找到 ruby 1 8 的补
  • Spring多事务管理器、单事务

    我有一个复杂的情况 我必须使用 2 个不同的数据库 因此我使用 2 个不同的事务管理器 Spring中有没有办法将这些事务管理器链接到单个事务中工作 如果第二个数据源出现异常 第一个数据源的更改应该回滚
  • vue代理设置不起作用

    我有一个 Vue 项目 vue cli 3 x 我定义的代理package json基于本文不管用 目标服务器看不到 API 请求 我在这里缺少什么 vue 文件
  • xslt 仅在一个节点中将 \n 替换为

    嘿 我有一个节点 其中包含一条消息 例如 string1字符串2刺3 但是 当它渲染时 它会渲染所有一行 我如何将所有 n 替换为 s 我试过了 但我收到这个错误 加载样式表时出错 XSLT XPath 函数无效 我该怎么做呢 在您要处理的
  • Android使用buildozer编译错误

    我正在尝试编译一个 apk this one 使用构建器 但我不断收到下面的命令失败消息 我尝试过使用不同的 python 路径 重新安装 buildozer 使用不同的 buildozer 路径 从 Mac HD 编译 使用 sudo 编
  • Eigen - 将常量数组映射到动态向量

    我需要定义一个函数 它需要constC 数组并将其映射到Eigen地图 以下代码给我一个错误 double data 10 0 0 typedef Eigen Map
  • 在 WebView Google Tv 应用上处理方向键上的箭头键

    我已经构建了一个 Android 应用程序 它在 WebView 中加载 html 页面 并且工作正常 除了应该在方向键上发生的操作不起作用这一事实 如果我用其他键更改箭头的操作 它就会起作用 在 Web 浏览器中加载 html 页面工作正
  • 如何将 HTML 输入值数据类型更改为整数?

    我正在使用 jQuery 检索输入按钮提交的值 该值应该是一个整数 我想将其增加一并显示它 Getting immediate Voting Count down button id var countUp this closest li
  • Android 浏览器 - 当锚点聚焦时删除轮廓边框

    我在我的 Android 应用程序上使用一个加载外部页面的 webview 它有一些锚点 a 标签 当我按下它时 会出现黄色边框 我怎样才能防止它并删除这个边框 我尝试过以下技巧 jQuery a focus function this a
  • 在 Laravel 中创建可链接的方法

    我一直在尝试在 laravel eloquent 中创建自己的可链接方法 但我错过了一些东西 并且不确定什么 这听起来可能有点疯狂 但请看一下我下面的函数 以便更好地了解我想说的内容 class Post extends Eloquent
  • 寻找对我的线程安全、无锁队列实现的批评

    因此 经过一番研究后 我写了一个队列 它使用固定大小的缓冲区 因此它是一个循环队列 它必须是线程安全的 我已经尝试使其成为无锁的 我想知道它出了什么问题 因为这些事情我自己很难预测 这是标题 template
  • 如何从 jpeg 或 png 格式的字节数组在画布上绘制图像

    就像标题所说 我有一个表示图像内容的字节数组 可以是 jpeg 或 png 我想将其绘制在常规画布对象上
  • Application.Run() 和 Form.ShowDialog() 有什么区别?

    在我的应用程序中 我想首先显示登录表单 如果登录成功则显示主表单 目前我正在做这样的事情 var A new LoginForm if A ShowDialog DialogResult OK Application Run new Mai