Language/C#

modal form 만들기

비비이잉 2022. 10. 24. 15:32
반응형

 

private void panel_MouseMove(object sender, MouseEventArgs e)
{
    Screen[] screens = Screen.AllScreens;
    
    if(screens.Length >1)
    {
        GlobalConfig.Instance.APPPosition = screens[0].WorkingArea.Contains(this.Location) ? 0: 1;
    }
}


Screen[] src = Screen.AllScreens;
var area = src[GlobalConfig.Instance.APPPosition].WorkingArea;
this.Location = new Point((area.Width - this.Width) / 2 + area.X, (area.Height - this.Height) / 2);

 

22.10.24 문제 현상 

- 단일 모니터의 경우 .ShowDialog()로 modal 의 방법으로 띄워줄 때 문제가 없지만 듀얼 or 멀티 모니터의 경우 앱이외의 창에 포커스를 이동했을 경우 .ShowDialog()나 CenterToParent()를 해주어도 async로 동작하는 다이얼로그 폼에서는 포커스가 다른 모니터로 이동하게 된다. 따라서 다이얼로그 async로 뜰 때에는(=Focus가 앱이 아닌 다른 창으로 이동했을 경우) 현재 실행 되고 있는 모니터의 위치를 찾아주는 방법으로 접근해야함을 알게되었다. 

 

또 다른 접근방법 

- 포커스를 잃었을때의 이벤트를 받아서 다이얼로그폼을 띄워주어야하는 시점에, 포커스를 현재 앱이 실행되고 있는 곳으로 포커스를 옮겨주는 방법이 있을 수 있다. 

 

https://stackoverflow.com/questions/31424924/display-form-on-centre-of-screen-for-a-dual-monitor-how-to

 

Display Form on centre of screen for a dual monitor How to?

I am developing a Windows desktop application dual monitor where I need to display my form sometimes on primary screen and sometimes on secondary, which works fine but when I display it on my secon...

stackoverflow.com

 

https://akinokaze.tistory.com/168

 

반응형

'Language > C#' 카테고리의 다른 글

Cache 파일 캐시 시스템  (0) 2022.10.31
[ 벤치마크 ] 부하분산 체크  (0) 2022.10.26
모달 / 모달리스  (0) 2022.10.24
[TDD]  (0) 2022.10.18
이슈 해결 과정  (0) 2022.10.14