8

当我从 Visual Studio 开始调试应用程序时,它会直接在 Visual Studio 之上启动应用程序。这在我的调试中强加了一个步骤,尽管很小,将应用程序窗口移动到我的第二个监视器,这样我就可以看到应用程序的状态,同时还可以观察断点命中。(有时,我什至很少遇到异常!)

我已经阅读了几篇关于为多个监视器优化 Visual Studio 的帖子,但大多数答案都围绕着 Visual Studio windows,而不是调试的应用程序的窗口。另一个答案是特定于控制台应用程序的。有什么方法可以强加我想要的窗口位置,或者解决我在 Visual Studio 暂停时被困在 Visual Studio 后面的应用程序问题的另一种解决方案?

4

2 回答 2

4

我在调试应用程序中使用此代码。我将调试屏幕设置为环境变量DEBUG_SCREEN

#if DEBUG
    if (Debugger.IsAttached)
    {
        int debugScreen;
        if (int.TryParse(Environment.GetEnvironmentVariable("DEBUG_SCREEN") ?? string.Empty, out debugScreen))
        {
            Application.OpenForms[0].MoveToScreen(debugScreen);
        }
    }
#endif

您可以使用您的主表单而不是 Application.OpenForms[0]。

方法 MoveToScreen 来自 Alex Strickland: https ://stackoverflow.com/a/34263234/3486660

public static bool MoveToScreen(this System.Windows.Forms.Form form, int screenNumber)
{
    var screens = Screen.AllScreens;

    if (screenNumber >= 0 && screenNumber < screens.Length)
    {
        var maximized = false;
        if (form.WindowState == FormWindowState.Maximized)
        {
            form.WindowState = FormWindowState.Normal;
            maximized = true;
        }
        form.Location = screens[screenNumber].WorkingArea.Location;
        if (maximized)
        {
            form.WindowState = FormWindowState.Maximized;
        }
        return true;
    }

    return false;
}
于 2016-08-24T09:42:50.000 回答
3

你不能真的指望 VS 处理你的应用程序的窗口,所以让你的 gui 应用程序记住它们之前关闭时的位置。这不仅完美地解决了您描述的问题(嗯,在第一次运行之后),它还提供了更好的用户体验。查看Get/SetWindowPlacement(也可以在 C# 中轻松使用)。

于 2013-10-22T18:34:31.497 回答