簡體   English   中英

如何確定運行.NET Windows Forms程序的監視器?

[英]How do I determine which monitor my .NET Windows Forms program is running on?

我有一個C#Windows應用程序,如果用戶將其移動到第二台顯示器,我希望它能夠顯示在第二台顯示器上。 我需要保存主窗體的大小,位置和窗口狀態 - 我已經處理過了 - 但是當用戶關閉應用程序時,我還需要知道它所在的屏幕。

我正在使用Screen類來確定當前屏幕的大小,但我找不到任何關於如何確定運行應用程序的屏幕的內容。

編輯:感謝您的回復,大家好! 我想確定窗口所在的監視器,以便我可以進行適當的邊界檢查,以防用戶意外地將窗口放在查看區域之外或更改屏幕大小,使得窗體不再完全可見。

您可以使用此代碼獲取一系列屏幕。

Screen[] screens = Screen.AllScreens;

您還可以通過運行此代碼找出您所在的屏幕( 是您所使用的Windows窗體)

Screen screen = Screen.FromControl(this); //this is the Form class

簡而言之,請查看Screen類和靜態幫助器方法,它們可能會對您有所幫助。

MSDN鏈接 ,沒有多少..我建議你自己搞亂代碼。

如果您還記得窗口的位置和大小,那就足夠了。 當您將位置設置為先前使用的位置時,如果它恰好位於第二個監視器上,它將返回到那里。

例如,如果您有2個顯示器,兩個都是大小為1280x1024並且您將窗口的左側位置設置為2000px,它將出現在第二個顯示器上(假設第二個顯示器位於第一個顯示器的右側。):)

如果您擔心下次啟動應用程序時第二台顯示器不在那里,您可以使用此方法確定您的窗口是否與任何屏幕相交:

private bool isWindowVisible(Rectangle rect)
{
    foreach (Screen screen in Screen.AllScreens)
    {
        if (screen.Bounds.IntersectsWith(rect))
            return true;
    }
    return false;
}

只需傳入窗口所需的位置,它就會告訴您它是否會在其中一個屏幕上顯示。 請享用!

你可以獲得當前的屏幕

var s = Screen.FromControl(this);

this是表格(或表格上的任何控件)。 至於如何記住這有點棘手,但我會選擇Screen.AllScreens數組中的索引,或者s.DeviceName。 在任何一種情況下,請在啟動時使用設置之前進行檢查,以防止使用已斷開連接的監視器。

表單的位置將告訴您表單所在的屏幕。 我真的不明白為什么你需要知道它是什么屏幕,因為如果你使用你保存的位置恢復它,它應該只是恢復到相同的位置(也許你可以擴展為什么)。

否則你可以這樣做:

Screen[] scr = Screen.AllScreens;
scr[i].Bounds.IntersectsWith(form.Bounds);

每個屏幕都有一個Bounds屬性,返回一個Rectangle。 您可以使用IntersectsWith()函數來確定表單是否在屏幕內。

此外,它們基本上提供了一個在Screen類中執行此操作的功能

Screen screen = Screen.FromControl(form);

您可以使用'Screen'對象:System.Windows.Forms.Screen

開始玩這樣的事情:

        Screen[] screens = Screen.AllScreens;
        for (int i = 0; i < screens.Length ; i++)
        {
            Debug.Print(screens[i].Bounds.ToString());
            Debug.Print(screens[i].DeviceName);
            Debug.Print(screens[i].WorkingArea.ToString());
        }

它可以滿足您的需求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM