2013-10-22 35 views
2

當我開始從Visual Studio調試應用程序時,它直接在Visual Studio之上啓動應用程序。這在我的調試中強加了一個步驟,雖然很小,但將應用程序窗口移動到第二個監視器,以便我可以看到應用程序的狀態,同時還可以觀看斷點。 (有時,很少,我什至遇到異常!)開始從Visual Studio調試到第二個監視器

我已經閱讀了關於優化多顯示器的Visual Studio的幾篇文章,但大多數答案是revolve around Visual Studio windows,而不是調試的應用程序的窗口。另一個答案是specific to console applications。有什麼辦法強制我想要的窗口位置,或另一種解決方案來解決我的應用程序在暫停後被困在Visual Studio後面的問題?

回答

2

你不能真正期待VS處理你的應用程序的窗口,所以讓你的GUI應用程序記住他們之前關閉的位置。這不僅解決了你描述得很完美的問題(當然,在第一次運行之後),它也提供了更好的用戶體驗。看看Get/SetWindowPlacement(可以很容易地從C#中使用)。

+1

同意。我希望我*可以期待VS來處理它,因爲我正在對遺留應用程序的工作範圍太小,以至於無法進行此更改。 +1爲前瞻性答案。 –

0

我在我的調試應用程序中使用此代碼。 我將調試屏幕設置爲環境變量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是從亞歷克斯斯特里克蘭: 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 maximised = false; 
     if (form.WindowState == FormWindowState.Maximized) 
     { 
      form.WindowState = FormWindowState.Normal; 
      maximised = true; 
     } 
     form.Location = screens[screenNumber].WorkingArea.Location; 
     if (maximised) 
     { 
      form.WindowState = FormWindowState.Maximized; 
     } 
     return true; 
    } 

    return false; 
} 
相關問題