我想將窗體放置在屏幕的左上角。表單位置和大小行爲
我試過this.Location = new Point(0,0)
,但窗口位於(7,0) - 窗口頂部位於屏幕頂部,但左側距離屏幕邊緣7個像素。 我創造了新的WinForms應用程序進行測試和只添加以下代碼:
private void Form1_Load(object sender, EventArgs e)
{
Point p = new Point(0, 0);
WindowState = FormWindowState.Maximized;
Debug.WriteLine("\nMaximized");
Debug.WriteLine("Location: " + Location);
Debug.WriteLine("Size: " + Size);
Debug.WriteLine("PointToScreen(0,0): " + PointToScreen(p));
WindowState = FormWindowState.Normal;
Location = p;
Debug.WriteLine("\nNormal");
Debug.WriteLine("Location: " + Location);
Debug.WriteLine("Size: " + Size);
Debug.WriteLine("PointToScreen(0,0): " + PointToScreen(p));
Debug.Write("\nScreen.PrimaryScreen.WorkingArea: ");
Debug.WriteLine(Screen.PrimaryScreen.WorkingArea);
}
輸出是:
Maximized
Location: {X=-8,Y=-8}
Size: {Width=1936, Height=1056}
PointToScreen(0,0): {X=0,Y=23}
Normal
Location: {X=0,Y=0}
Size: {Width=300, Height=300}
PointToScreen(0,0): {X=8,Y=31}
Screen.PrimaryScreen.WorkingArea: {X=0,Y=0,Width=1920,Height=1040}
爲什麼Location = new Point(0,0)
不會在(0,0)位置的形式? 這是由於我的系統上的東西?我有Win10和VS2015。任務欄在底部,我的桌面左側沒有任何東西。 爲了將它定位在(0,0)上,我實際上必須將它定位在(-7,0)上。此外,最大化形式的報告寬度比屏幕寬度大16個像素。我明白,由於窗口邊緣,標題欄等,客戶區域大小和窗體大小之間存在差異,但事實並非如此。當表格最大化時,沒有左右邊緣(客戶區寬度=桌面寬度),但表格寬度爲+ 16px。窗體四邊各有8px,但Y位置正確。爲什麼Y位置正確而X不是?
您將位置設置爲「0,0」,「Debug.WriteLine」顯示「位置:{X = 0,Y = 0}」。所以有什麼問題?同樣'PointToScreen(0,0):{X = 8,Y = 31}'是可以的,它是窗體客戶區的'0,0'點的屏幕座標。 –
我在Win10或8.1之前沒有注意到這個定位問題。如果我不得不猜測,我會說觀察到的問題是不能再禁用的桌面窗口管理器組合的結果。一些新的調查。謝謝。 :) – TnTinMn
問題是,就像我寫的那樣,窗口的位置(實際上,我能看到的)是右邊7個像素。注意客戶端座標(8,31) - X是8,因爲窗口位置是7,加上窗口邊緣的1個像素,並且由於標題欄Y是31。這就是爲什麼當我將位置設置爲(-7,0)時,窗戶位於角落。所以,客戶端座標是好的 - 客戶端矩形_really_從(8,31)開始。表單座標不正確 - 表單位置是_really_(7,0),而不是(0,0),如其所述。 – c4551u5