Programming/c# & winform2020. 10. 26. 14:40

Screen.AllScreens.OrderBy() 를 통해

WorkingArea.X 값을 정렬하면 되긴 한데..

Screen[0] 으로 접근 가능한 순서가 아니게 되니 어떻게 해야 하려나..

 

원론적으로는

Screen.AllScreen[0].DeviceName 에 접근해서 다 잘라내고 숫자만 빼내 -1을 해주면 될 것 같긴한데..

 

일단 현재 모니터 순서

Screen.AllScreens 에서는 아래의 순서로 출력된다.

0 - 가장 오른쪽 (1920,0)

1 - 가장 왼쪽 (-1920,0)

2 - 중앙 (0,0)

 

private void Form1_Load ( object sender, EventArgs e )
{
    var parent = new FlowLayoutPanel() { Dock = DockStyle.Fill };            
    Controls.Add(parent);

    //Order by how they are laid out to the user
    var screens = Screen.AllScreens.OrderBy(s => s.WorkingArea.X).ToArray();

    foreach (var screen in screens)
    {
        var panel = new Panel() { Width = screen.Bounds.Width / 10, Height = screen.Bounds.Height / 10 };
        panel.BackColor = screen.Primary ? Color.Blue : Color.Silver;
                                
        panel.Controls.Add(new Label() { Text = screen.DeviceName });

        parent.Controls.Add(panel);
    };
}

[링크 : https://social.msdn.microsoft.com/Forums/en-US/048586a5-e04b-40d8-a2d6-4c903fbf9b1b/...]

[링크 : https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.forms.screen?view=netcore-3.1]

Posted by 구차니