[英]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.