2009-05-20 5 views
14

.NET 3.5 MDI WinForms 응용 프로그램이 있습니다..NET에서 새로운 최대화 된 MDI 자식 폼을 만드는 중 아이콘이있는 문제

하위 폼의 Icon 속성을 설정하고 아이콘이 폼의 왼쪽 위 모서리에 올바르게 표시됩니다. 그런 다음 하위 폼을 최대화하고 아이콘이 여전히 괜찮습니다.

자식 폼이 여전히 최대로으로 최대화 된 다른 하위 창이 열립니다. 이 양식의 아이콘은 Icon 속성의 아이콘이 아니라 기본 .NET 아이콘 (파란색, 빨간색 및 노란색 사각형이있는 아이콘)입니다. 그러나 MDI 상위 폼의 크기를 조정하면 아이콘이 다시 설정되고 제대로 표시됩니다.

해결 방법이 있습니까? 이는 것을 의미합니까

private void StatsForm_Load(object sender, EventArgs e) 
{ 
    //bug that means you have to set the desired icon again otherwise it reverts to default when child form is maximised 
    Icon = new System.Drawing.Icon("research.ico"); 
} 

:

+0

당신이 그것을 연 후 자식 창에 때 .refresh을하고 시도? –

답변

8

오른쪽 내가 찾은 해결책은 ... 이것에 대한

해결 방법은 다음과 같이 자식 폼의로드 이벤트에 아이콘을 다시 설정하는 것입니다 문제의 아이콘 파일을 VS 프로젝트/솔루션에 먼저 추가하고 "항상 복사"하도록 설정해야 솔루션이 빌드 될 때 복사됩니다.

HTH Calanus

+2

매력처럼 작동합니다. 감사. 어떤 이유인지 나는 결코 아이콘을 재설정하려고 생각하지 않았다. 또한 임베디드 리소스로도 작동하므로 최종 디렉토리에 수많은 (대체 가능한) 파일이 없습니다. –

4

나는 유일한 해결책은 비활성화하고 MDI 자식 활성화하는 것을 발견했다 :

document.Show(); 
// Work-around for error in WinForms that causes MDI children to be loaded with the default .NET icon when opened maximised. 
ActivateMdiChild(null); 
ActivateMdiChild(document); 

this reply on MSDN forums에 주어진 솔루션입니다 그리고 그것은 나를 위해 일했습니다.

+0

작동하지만 ShowDialog를 아무 데나 사용하면 문제가 발생합니다. – Drake

+0

어떤 종류의 문제입니까? –

+0

코드에서 ShowDialog 대신 ShowDialog를 사용하면 해당 호출에서 블록을 실행합니다. 대화 상자가 닫히면 ActivateMdiChild에 대한 호출이 실행되지만 두 번째 호출은 '문서'가 더 이상 존재하지 않으므로 작동하지 않습니다 – alldayremix

0

내 솔루션 : MdiChild "ShowIcon"속성을 true로 설정하고 1x1 투명 아이콘을 지정하십시오. 문제 해결됨.

+1

아마도 뭔가가 누락되었지만 이것이 어떻게 적용되는지 모르겠습니다. 원래 질문. 문제는 내가 원하지 않을 때 아이콘이 표시되는 것이 아니라 표시하고 싶은 * 아이콘이 표시되지 않고 대신 기본값으로 대체된다는 것입니다. –

0

이 문제를 해결하기위한 가장 좋은 방법은 here입니다.

aNewForm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog 
AddHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged 

aNewForm.Show() 
aNewForm.WindowState = FormWindowState.Maximized 

RemoveHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged 

핸들러

Protected Sub Form_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) 

    If WindowState = FormWindowState.Maximized Then 
     If FormBorderStyle <> FormBorderStyle.Sizable Then FormBorderStyle = FormBorderStyle.Sizable 
    End If 

End Sub 
1
form.WindowState = FormWindowState.Normal 
form.Show() 
form.WindowState = FormWindowState.Maximized 
form.Show() 

내 문제를 해결!

3
private void frmChild_Shown(object sender, EventArgs e) 
{ 
    // Work-around for maximized BUG 
    this.Icon = this.MdiParent.Icon; 
    this.WindowState = FormWindowState.Normal; 
    this.WindowState = FormWindowState.Maximized; 
} 
11

Calanus '솔루션에 대한 약간의 수정 :

private void MdiBase_Load(object sender, EventArgs e) 
    { 
     // Fixes bug where loading form maximised in MDI window shows incorrect icon. 
     this.Icon = Icon.Clone() as Icon; 
    } 

이 디자인 타임에 아이콘을 설정할 수 있으며, 하드 코딩이 필요하지 않습니다 (당신이 다른 형태의 것 등) 파일 또는 자원 액세스.

2

이 문제도 해결 될 것입니다.

myForm.WindowState = FormWindowState.Normal; 
myForm.Show(); 
myForm.WindowState = FormWindowState.Maximized; 
0

MDI 어린이에의 Form_Load 방법의 첫 번째 줄이 추가 나를 위해 작동합니다

this.Icon = new Icon(this.Icon, this.Icon.Size); 
관련 문제