Windows 窗体和 ShowDialog 问题

2023-11-21

我有一个无国界Windows 窗体应用。

The main window creates other forms (simple dialogs where I can click yes or no) with ShowDialog(). Every created dialog is not visible in the taskbar, my application has only one taskbar entry that focuses my application (and if a dialog is open that one is focused). If I use ALT + TAB to cycle to all open windows I only see one entry, too.

但是,如果在我的应用程序没有焦点时创建对话框(例如,用户启动一个长时间运行的任务,开始处理其他事情,并且在后台运行),我的应用程序会显示一个对话框“任务已完成..” ."),我想返回我的申请,事情变得越来越奇怪。

  • 如果我单击任务栏来聚焦我的应用程序,则主窗口将被聚焦(而不是对话框)。
  • 我无法使用主窗口(因为仍然有一个打开的模式对话框)。
  • Windows 7 ALT + TAB preview shows the Dialog while the taskbar mouseover preview shows the main window (in normal behavior both show the dialog in front of the main window).
  • The only way to make my application usable again is to ALT + TAB to the entry and close the modal dialog.
  • If I use ALT + TAB only the dialog is brought to the front and the main window is still in the background.

有办法防止这种情况发生吗? 我知道该怎么做,但大多数客户认为应用程序崩溃了,因为主窗口没有响应。

Update:

解决方案是将顶层窗口传递给ShowDialog()方法(在大多数情况下,如果以“this”的形式使用)。

因为我不想重构我的整个代码,并且我的所有表单都继承自“MyCustomFormBase”,所以这里有一个效果很好的小解决方案。

Public Class MyCustomFormBase

    Public Shared Property ApplicationMainForm() As Form
        Get
            Return _applicationMainform
        End Get
        Set(ByVal value As Form)
            _applicationMainform = value
        End Set
    End Property
    Private Shared _applicationMainform As Form

    Public Shadows Function ShowDialog() As DialogResult
        If MyCustomFormBase.ApplicationMainForm IsNot Nothing Then
            Return MyBase.ShowDialog(MyCustomFormBase.ApplicationMainForm)
        Else
            Return MyBase.ShowDialog()
        End If
    End Function

    Public Shadows Function ShowDialog(ByVal owner As IWin32Window) As DialogResult
        Return MyBase.ShowDialog(owner)
    End Function

End Class

在我使用的主窗口的构造函数中

MyCustomFormBase.ApplicationMainForm = Me

一次。它帮助我重构了半天;)


您是否尝试过将对主窗口的引用传递给ShowDialog calls?

// assuming this code is in the main form (so "this" refers to the main form)
DialogForm dialog = new DialogForm();
DialogResult result = dialog.ShowDialog(this);

引用自此超载的文档:

此版本的 ShowDialog 方法 允许您指定特定的表单 或将拥有该对话框的控件 显示的框。如果您使用 此方法的版本没有 参数,显示对话框 将自动归 您当前活动的窗口 应用。

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

Windows 窗体和 ShowDialog 问题 的相关文章

  • 基于 Web.Config 使用的 GAC 程序集版本

    Good Day 我有一个在 GAC 中使用自定义程序集的项目 为了能够使用它 我在中添加了对我的项目的引用 C WINDOWS Microsoft NET assembly GAC MSIL JOHN CommonLib v4 0 1 0
  • Microsoft Teams 中私人消息的传入 Webhook

    我可以从 C 应用程序或 PS 脚本创建传入 Webhook 将 JSON 消息发送到 MSFT 文档所解释的通道 但是 我想使用传入的 webhook 将 JSON 消息从我的应用程序发送到用户 作为私人消息 就像 Slack 允许的那样
  • 在 Javascript 中本地化字符串

    我目前正在使用 resx文件来管理我的 NET 服务器端资源 我正在处理的应用程序还允许开发人员将 JavaScript 插入各种事件处理程序中以进行客户端验证等 对我来说本地化 JavaScript 消息和字符串的最佳方法是什么 理想情况
  • C# 枚举 - 根据掩码检查标志

    我有以下枚举标志 Flags private enum MemoryProtection uint None 0x000 NoAccess 0x001 ReadOnly 0x002 ReadWrite 0x004 WriteCopy 0x0
  • 如果浏览器在 asp .net 中关闭,请从浏览器中注销?

    我的要求有点复杂 用户正在使用 Web 浏览器访问数据库 而在访问数据库时 如果用户关闭活动页面而不是注销会话 该会话需要自动注销 有人可以指导我如何做这个吗 我在母版页中使用了jquery onbeforeunload 我收到消息离开页面
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 如何在 Windows 窗体中运行屏幕保护程序作为其背景?

    如何在 Windows 窗体中运行屏幕保护程序作为其背景 用户还可以在屏幕保护程序运行时与表单控件进行交互 为什么这个 我们有一个案例 需要在用户时运行 Windows Bubbles 屏幕保护程序 可以继续与表单控件交互吗 您可以使用以下
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • 无法获取托管类型(“T”)的地址、获取其大小或声明指向托管类型的指针

    为什么哦为什么这是不允许的 private static unsafe byte ConvertStruct
  • 强制 Mpeg2 解复用器使用 ffdshow 渲染 H 264 数字电视视频

    不幸的是 我花了很多时间尝试使 DirectShow 的 DTVViewer 示例正常工作 但没有成功 DVBT网络的视频格式是H264 我发现IntelliConnect行为IFilterGraph更喜欢使用 Mpeg2 视频格式 对于那
  • 确定最接近的已知颜色

    我允许我的应用程序的用户选择自定义颜色 并希望有一种方法来显示每种颜色的友好名称 而不是显示十六进制代码的文本表示形式 我如何找到最近的System Drawing Color对于给定的十六进制代码 希望这对某人有帮助 Public Fun
  • DataGridView 中的 C# FormatException

    我创建了一个带有一些列的 DataGridView 订单列仅允许用户输入 int 数字 当我输入 j 例如 时 它会抛出 FormatException 并且我尝试添加 try catch 来解决问题 但它看起来不起作用 private v
  • 如何将行从一个 DataGridView 移动到另一个 DataGridView?

    我有两个具有相同列架构的 DataGridView 尽管两个不同的 DataView 作为数据源 如果这很重要 将行从一个数据网格视图移动到另一个数据网格视图的最佳 最快方法是什么 我相信如果您在 DataTable table1 中有一行
  • Scrollable Control中的Scroll/Scroll有什么用?

    ScrollableControl 类有 2 个受保护的布尔属性 HScroll 和 VScroll As the document https msdn microsoft com en us library system windows
  • 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

    我正在尝试使用 Renci SSH NET 从 C Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本 我想一个接一个地运行脚本 但不知道如何运行脚本并读取输出并将其存储在标签中 我已经尝试了下面的代码 但无法一行接一行
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 从 Excel 应用程序对象中查找位数(32 位/64 位)?

    是否可以从 Microsoft Office Interop Excel ApplicationClass 确定 Excel 是以 32 位还是 64 位运行 Edit该解决方案应该适用于 Excel 2010 和 Excel 2007 此

随机推荐

  • 将 Chrome 浏览器打包到 HTML5 Android 应用程序中

    我们正在开发几个基于 Sencha 框架的 HTML5 应用程序 并考虑将它们打包到 PhoneGap 等应用程序中 然而 即使你将这些打包到应用程序中 我假设你仍然需要处理 Android 碎片问题 因为各个制造商对浏览器进行了奇怪的修改
  • 应用程序在后台时 iPhone 手电筒不工作

    您好 我正在使用基于位置的应用程序 并且想要在后台使用 iPhone 相机手电筒 不幸的是 手电筒仅在前台工作 即使代码正在执行 它也会自动关闭后台的闪光灯 我使用的代码仅在前台运行 import
  • 创建交互式弹出对话框

    我想知道是否可以使用shiny 和shinyBS 创建一个交互式弹出对话框 例如 我有一个字符串 我想更改它 并且在执行之前会出现一个对话框 询问我是否真的要更改它 如果我说 是 它就会执行 否则它会放弃更改 这是我的尝试 但我发现了两个问
  • MongoError:拓扑已关闭,请连接

    我是一名前端开发人员 试图在新的 Next 项目中拓展自己的视野 第一次学习 Node Mongo 和 GraphQL 的服务器端 Apollo 对我来说是最简单的入门方式 因为我已经在之前的项目中使用过客户端 Apollo 我一直在关注官
  • 为什么我的 C 程序中出现 ws2_32.dll 的链接器错误?

    我正在 Visual Studio 2010 中编写我的程序 我无法链接名为ws2 32 dll和我的项目 谁能告诉我该怎么做 通常您不会链接到 ws2 32 dlldirectly而是 WS2 32 Lib 您可以在 Windows SD
  • StringBuilder 和 StringBuffer 的区别

    之间的主要区别是什么StringBuffer and StringBuilder 在决定其中任何一项时是否存在任何性能问题 StringBuffer是同步的 StringBuilder is not
  • Android xml布局中的视图限制是多少

    任何人都知道在 android 布局 XML 中 可以嵌入到 XML 中的最大视图限制是多少 有限制吗 严格来说 限制 是80 当布局中有太多视图时 Lint 会报告以下内容 AndroidLintTooManyViews 描述 布局有太多
  • 从当前光标位置创建范围 Word 2010 VBA

    我有一个 docm带有用户表单的文档 在用户表单上 我有一个按钮 需要在文档中最后一个已知的光标位置插入一些内容 一些文本 用于启动 为此 我想创建一个范围 我怎样才能获得这个范围的起始位置 Selection是文档中的当前位置 Selec
  • 如何将 UIScrollView 嵌套在 UIScrollView 中,以便用户可以滚动内部 UIScrollView?

    我还没有尝试过 但我假设一旦我知道用户想要在子滚动视图中滚动 我就必须禁用父滚动视图的滚动 对吧 两个滚动视图都是水平滚动的 如何暂时禁用父级的滚动检测 或者还有其他办法吗 UIScrollView 有一个属性叫做scrollEnabled
  • 在 Bootstrap 4 的较小屏幕上隐藏一列[重复]

    这个问题在这里已经有答案了 这是 Bootstrap 4 总是让我感到困惑的一个领域 假设你有这样的布局 div class container fluid div class row div class col sm 3 col sm 3
  • 不使用递归如何抛出堆栈溢出异常?

    不使用递归如何抛出堆栈溢出异常 由于没有其他人提到过 throw new System StackOverflowException 您可以在测试或进行故障注入时执行此操作
  • VS 插件将光标下的标识符的完整类型名称复制到剪贴板中[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有一个 Visual Studio 插件可以将光标下的标识符的完整类型名称复制到剪贴板中 请不要将我链接到 VS 2010 复制类 接口的完整类
  • 如何从一个具有依赖性的批处理文件启动多个批处理文件?

    我想运行一个批处理文件 启动其他批处理文件 我看了这里发布的类似问题 如何在一个 BAT 文件中运行多个 BAT 文件 我按照这个例子 特别是最后一个建议 并且它起作用了 部分 它确实启动了我需要的批处理文件 但是 为了使应用程序正常运行
  • 为什么 JavaFX 中没有 ObservableQueue?

    为什么JavaFX中没有ObservableQueue 如果我们查看 FXCollections 的 Java 9 文档 只是为了看看与 8 相比是否有任何更改 我们会看到用于创建 Observable 集 列表和映射的静态辅助方法 还有一
  • SVG 矩形忽略高度?

    这里有一个工作演示的一个矩形 我想将 height 属性移至 css好吧 它不起作用 让我一片空白 它发生在 Firefox 和 Chrome 中 它有不同的名字吗 我不明白为什么我不能使用 css 文件 填充颜 色有效 工作示例 css
  • pip install - 连接被同行重置

    当我尝试使用 pip 安装 lxml 时 出现异常 连接被对等方重置 Downloading unpacking lxml Downloading lxml 3 0 1 tar gz 3 2Mb 643Kb downloaded Excep
  • Vue 3:如何访问组件函数中的设置变量

    考虑以下使用 Vue 3 中的组合 API 的简单示例 我试图拥有一个实例test在我的组件的功能中可用
  • Linq to Sql、Linq、类型化数据集、ADO.NET 之间的区别

    我想知道这个问题有一段时间了 现在好像有很多方法不知道什么时候用什么 或者是否有必要学习它们 就像我不知道他们是否基本上做所有相同的事情 只是基本上坚持其中一个直到你掌握它然后也许看看其他的 因此 当我参加 ASP NET 课程时 它是我计
  • 使用C读取linux内核版本?

    我正在使用 Ubuntu 我想阅读其内核版本 我在 proc 中发现了一个名为version的文件 记录了当前内核的版本 如果我不想读取文件 是否有其他方法 例如 C 中的内置函数 可以读取 C 中的版本 Thanks 您可以使用uname
  • Windows 窗体和 ShowDialog 问题

    我有一个无国界Windows 窗体应用 The main window creates other forms simple dialogs where I can click yes or no with ShowDialog Every