Winform 응용 프로그램에서 작업 중이며 상위 양식 가운데에 모달 양식을 열고 싶습니다. 의 WinForm 응용 프로그램에서이 :MDI 응용 프로그램의 부모 양식 가운데에있는 모달 창 열기
- MDI 폼 MDI 폼의 메뉴 항목 중 하나를 클릭에
- 는 (모든 컨테이너로 시작 폼 행동 오픈) - 한 MDI 자식 폼
- 에 열립니다 MDI의 버튼 중 하나를 클릭합니다. 2 단계에서 열린 하위 버튼을 클릭합니다. - MDI 가운데에 열어야하는 모달 형식을 엽니 다. 하위 양식 (2 단계에서 열림)
첫 번째 모달 양식 내가 해낸 확실한 해결책은
입니다.TestModalForm obj = new TestModalForm()
obj.StartPosition = FormStartPosition.CenterParent;
obj.showdialog(this);
위의 해결 방법은 모달 형식이 항상 MDI 폼을 부모로 간주하기 때문에 작동하지 않았습니다. 2 솔루션에 대한 그래서 운동 : 내가 모달 창 폼로드의 방법을 썼다는 점에서 아래와 같이 중앙에 위치합니다 : MDI 폼이 최대화 형태로 열 때 솔루션 위
private void MakeWinInCenter()
{
if (this.Owner != null)
{
Form objParent = null;
int TopbarHeight = 0;
if (this.Owner.IsMdiContainer && this.Owner.ActiveMdiChild != null)
{
objParent = this.Owner.ActiveMdiChild;
TopbarHeight = GetTopbarHeight(this.Owner);
}
else
objParent = this.Owner;
Point p = new Point((objParent.Width - this.Width)/2, (objParent.Height - this.Height)/2);
p.X += objParent.Location.X;
p.Y += TopbarHeight + objParent.Location.Y;
this.Location = p;
}
else
{
//If owner is Null then, we have reference of MDIForm in Startup Class - use that ref and opens win in center of MDI
if (Startup.MDIObj != null)
{
this.Left = Convert.ToInt32((Startup.MDIObj.Width - this.Width)/2);
this.Top = Convert.ToInt32((Startup.MDIObj.Height - this.Height)/2);
}
}
}
private int GetTopbarHeight(Form MDIForm)
{
int TopbarHeight = 0;
MdiClient objMDIClient = null;
foreach (Control ctl in MDIForm.Controls)
{
if (ctl is MdiClient)
{
objMDIClient = ctl as MdiClient;
break;
}
}
if (objMDIClient != null)
{
TopbarHeight = MDIForm.Height - objMDIClient.Size.Height;
}
return TopbarHeight;
}
가 완벽하게 작동합니다. 그러나 MDI 형식 (즉, 최대화 된 형식이 아닌)의 크기를 확인하거나 MDI 형식을 다른 화면으로 옮길 때 - 여러 화면의 경우 위의 솔루션이 작동하지 않고 MDI 가운데에 모달 형식이 열리지 않습니다. 자식 양식
또한 this Question에서 보았지만 내 문제에는 도움이되지 않습니다.
누구든지 문제를 해결할 수있는 제안이나 해결책이 있습니까?
감사
if (this.MdiParent! = null) ... –
안녕하세요 Davide, TestModalForm.showdialog (this.MdiParent); 작동하지 않습니다. 또한 this.MdiParent는 MDI의 가운데에 표시되도록 null을 제공합니다. 필요하지는 않습니다. 제 2 차 MDI 아동 센터에서 3 차 모달 창을 열어야합니다. 그 질문의 시작에서 세 번째 지점. – Shah