【问题标题】:C# How to force a slpash screen to be shown in the primary display in a dual-monitor system?C#如何强制在双显示器系统的主显示器中显示启动画面?
【发布时间】:2010-09-20 15:18:04
【问题描述】:

在具有两台显示器的系统中显示启动画面时遇到问题。当我在主显示器中启动应用程序,然后在显示初始屏幕之前将鼠标指针移动到第二个监视器时,我的初始屏幕“跟随”鼠标指针。这意味着,启动屏幕显示在第二个显示器中,完成工作后消失,应用程序显示在主监视器中。这看起来很丑陋且不专业。

我试图在表单的属性中设置属性 FormStartPosition.CenterScreen 并在运行时在我的表单的构造函数中设置它,但这些都没有奏效。顺便说一句,我使用的是 C#。

是否有任何提示可以实现启动屏幕与我的应用程序显示在同一监视器中?

任何帮助将不胜感激。

您好, 维克多

【问题讨论】:

  • “跟随”鼠标指针的启动画面非常不寻常。这不是偶然发生的,您肯定可以注释掉一些代码来禁用此功能。当然不能帮你找到那个代码。
  • @HansPassant:即使在 .NET 4.0 下,这种“行为”也会影响我的 Winforms 应用程序。我在启动时显示了一个登录对话框,它顽固地坚持出现在此刻碰巧“拥有”鼠标的任何显示器上。这非常烦人。更有趣的是,这篇文章中的修复对我不起作用。

标签: c# splash-screen multiple-monitors


【解决方案1】:

在 Main 中,您需要强制表单在主监视器上启动。以下是如何在主监视器的 (0, 0) 处打开表单。

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Form1 f = new Form1();
        f.StartPosition = FormStartPosition.Manual;
        f.Location = Screen.PrimaryScreen.Bounds.Location;

        Application.Run(f);
    }

【讨论】:

  • 嗨,Alex,感谢您的回答,不幸的是,这无助于解决问题。我应该提到闪屏包含在一个由 C++ 应用程序调用的 dll(用 C# 创建的组件)中。因此,启动屏幕必须显示在启动 C++ 应用程序的显示器中。我尝试包括行 f.Location = Screen.PrimaryScreen.Bounds.Location;在 slpash 屏幕的构造函数中,但它没有帮助。有什么想法吗?
  • 您好,问题已解决,包括我的表单构造函数中的以下行:this.Location=Screen.PrimaryScreen.Bounds.Location; this.CenterToScreen;如果我使用 this.StartPosition=FormStartPosition.CenterScreen;然后我得到了描述的问题。感谢您的帮助!
猜你喜欢
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 2023-03-27
  • 2013-10-17
相关资源
最近更新 更多