我有一个真正没有主要形式的Winforms应用程序 - 它只是一个简单的文件处理工具,因此它实际上并不需要一个。

当应用程序启动时,首先使用OpenFileDialog选择文件。然后,使用Showdialog()显示了一个对话框,并提供了一些应如何处理所选文件的选项。最后,在文件运行时显示进度条表格,并将应用程序退出。

问题是,当我从Visual Studio进行调试时,中间的表单不会显示在其他开放式窗口的顶部,例如Visual Studio本身。当我运行编译后的可执行文件时,似乎可以正常工作。

通常,当Showdialog导致出现在后面的对话框中时,解决方案是使用Showdialog(所有者)呼叫,除非我没有主要的表格可以说我没有所有者。

那么,如何使对话框以与OpenFileDialog自动相同的方式出现在其他窗口的顶部?

有帮助吗?

解决方案

我确切地知道您在说什么,而问题实际上是由于您的应用程序的设计与Windows处理焦点的方式分歧。自WIN31以来,Windows已经完成了这种类型的事情。就像一块土地一样;如果您显示应用程序中的窗口,请隐藏/禁用它, 你小睡,你输了 根据比尔。修复程序:您需要一个主窗口!或切换OS。仅仅因为它从EXE起作用并不意味着当您的一个用户从批处理或Explorer以外的其他用户启动时,它将起作用。

您可以摆脱困境 - 运行3个单独的EXE;尝试在3个应用程序上运行。用于最终定居,使自己陷入困境。

或查找如何使用SDK调用来抓取输入焦点的方式 - 连续版本的Windows很难使用它来减轻令人讨厌的应用程序(因此,可以在W98中执行此操作的应用程序将在XP中闪烁Taskebar Orange。 ) - 然后,程序员当然已经解决了这一点。你可以做到。

但是你做错了。重构是有序的,并在未来应用程序中变化。这不是我做出的决定; Windows Works的设置为石头,再加上用户期望的工作方式设置在数百万的大脑中,这比石头更难 - 随着流动而游泳!

易于重构,没有真正的影响:

  • 备份您的项目(或在TFS中搁置副本)
  • 在您的选项对话框中,削减所有控件。放入一个名为pnlopts的形式大小的面板。粘贴他们。
  • 使该形式成为您的主要形式。
  • 在form_shown中,设置pnlopts.visible = false,或以这种方式默认(如果您想有点垃圾,则可以显示其他面板,带有应用程序名称或背景图像;--)
  • 调用也显示该区域的文件DLG的设置代码
  • 将您的文件DLG设置为该表格为父母,作为中心父母的启动位置(我的意思是所有者不是父母)。请记住取消此=关闭设置表格
  • 完成此操作后,显示PNLOPTS。
  • 在确定按钮中,调用执行进度条的代码。您可以在此处再次隐藏或禁用PNLOPT。
  • 在整个窗口上,您都不会隐藏,设置可见= false或启用= false,否则您将调用Windows的焦点愤怒(这是您在此处造成痛苦的原因)。

真正的键是单行答案:如果您想禁用其功能,请始终可见并启用主窗口,只需灰色或隐藏其所有控件即可。 这是与面板最简单的事情。您可以在需要的情况下向用户展示其他面板或图像以娱乐它们(尤其是如果灰色[.enabled = false]内容没有意义)。

您不会喜欢这种外观的方式,否则您将像那样构建它,但是数百万行的Windows代码和数百万个Windows用户的大脑现在正在与您无情地不同意!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top