gpt4 book ai didi

.net - 没有主窗体的 Winforms 应用程序 - 对话框未显示在顶部

转载 作者:行者123 更新时间:2023-12-04 06:51:15 27 4
gpt4 key购买 nike

我有一个 winforms 应用程序,它并没有真正的主窗体——它只是一个简单的文件处理工具,所以它并不真正需要一个。

当应用程序启动时,首先使用一个 OpenFileDialog 来选择一个文件。然后,使用 Showdialog() 显示一个对话框,其中包含有关如何处理所选文件的一些选项。最后,在对文件进行操作时会显示一个进度条表单,然后应用程序退出。

问题是当我从 Visual Studio 调试时,中间窗体不会显示在其他打开的窗口之上,例如 Visual Studio 本身。但是,当我运行编译后的可执行文件时,它似乎工作正常。

通常,当 ShowDialog 导致出现后面的对话框时,解决方案是使用 Showdialog(owner) 调用,除非我没有主窗体可言,我没有要设置的所有者。

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

最佳答案

我确切地知道您在说什么,问题实际上在于您的应用程序设计与 Windows 处理焦点的方式不一致。 Windows 从 win31 开始就做了这种类型的事情。这就像一场土地掠夺;如果你从你的应用程序中显示一个窗口,然后隐藏/禁用它,你打盹,你输了根据比尔。修复:您需要一个主窗口!或者切换操作系统。仅仅因为它可以从 EXE 运行并不意味着当您的用户之一从批处理文件或资源管理器以外的地方启动它时它也可以运行。

您可以摆脱困境 - 运行 3 个单独的 exe;尝试在您的子 Main 中运行 3 个 Application.Run 线程;使用到SetTopMost,AppActivate自己。

或者查看如何使用 SDK 调用使您的应用程序获取输入焦点 - 连续版本的 Windows 使使用它的令人讨厌的应用程序变得困难(因此,可以在 w98 中执行此操作的应用程序将在 xp 中将任务栏闪烁橙色) - 然后程序员当然已经解决了这个问题。你可以这样做。

但你会做错了。重构是为了 future 应用程序的策略和改变。这不是我做出的决定; Windows 的工作方式是一成不变的,加上用户期望它工作的方式是由数百万个大脑决定的,这比石头还难——随波逐流!

轻松重构,没有实际影响:

  • 备份您的项目(或在 TFS 中搁置副本)
  • 在您的选项对话框中,剪切所有控件。放入一个名为 pnlOpts 的表单大小的面板。把它们贴回去。
  • 使该表格成为您的主要表格。
  • 在 form_shown 中,设置 pnlOpts.Visible=false,或者只是默认设置(如果你想要有点垃圾,你可以显示另一个带有应用程序名称或背景图像的面板;-)
  • 调用同样显示该区域中的文件 dlg 的设置代码
  • 将您的文件 dlg 设置为将该表单作为父级,将启动位置设置为中心父级(我的意思是所有者而不是父级)。记住从这里取消 = 关闭设置表单
  • 完成后,显示 pnlOpts。
  • 在确定按钮中,调用执行进度条的代码。您可以再次在此处隐藏或禁用 pnlOpts。
  • 您在任何时候都不能在整个窗口上隐藏、设置 Visible=false 或 enabled=false,否则您将调用窗口的聚焦愤怒(这是您在这里痛苦的原因)。

  • 这里真正的关键,单行答案:让主窗口始终可见并启用,如果你想禁用它的功能,只需灰色或隐藏它的所有控件。 使用面板最容易做到这一点。如果您愿意,您可以向用户展示其他面板或图像以取悦他们(尤其是当内容变灰 [.enabled=false] 没有意义时)。

    您不会喜欢那样的外观,或者您一开始就会像那样构建它,但是数百万行 Windows 代码和数百万 Windows 用户的大脑现在正在被动地强烈反对您!

    关于.net - 没有主窗体的 Winforms 应用程序 - 对话框未显示在顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091468/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com