2010-01-11 6 views
1

특정 상황에서 응용 프로그램이 최소화되었는지 감지하고 싶으면 창을 복원해야합니다.C# FormWindowState를 사용하여 복원 하시겠습니까?

if(this.WindowState == FormWindowState.Minimized) { 
    this.WindowState = FormWindowState.Normal; 
} 

을하지만, 사용자가 처음 양식을 극대화 경우 발생하는 다음을 최소화, 다음과 같이 나는 쉽게 그렇게 할 수 있습니까? WindowStateFormWindowState.Normal 또는 FormWindowState.Maximized으로 설정할지 여부는 알 수 없습니다. 이 문제를 해결하기 위해 확인할 수있는 메소드 또는 API 호출이 있습니까?

답변

2

아래 코드는 필요한 작업을 수행합니다. 사용자의 선택을 무시하는 것은 현명하지 못합니다.

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     mLastState = this.WindowState; 
    } 
    FormWindowState mLastState; 
    protected override void OnResize(EventArgs e) { 
     base.OnResize(e); 
     if (mLastState != this.WindowState) { 
      if (this.WindowState == FormWindowState.Minimized) this.WindowState = mLastState; 
      else mLastState = this.WindowState; 
     } 
    } 
} 
+0

나는 내 질문을 오해했다고 생각한다. (또는 충분한 정보를 제공하지 못했다.) 나는 사용자의 선택을 무시하지 않고있다. 이것은 파일 연결이있는 단일 인스턴스 응용 프로그램입니다. 사용자가 파일을 열면 기존 인스턴스가 앞으로 나오길 원합니다. 그래도 코드는 여전히 내 문제를 해결합니다. – jnylen

1

this.Show()으로 전화를 걸 수 있어야 이전 상태로 복원됩니다.

+1

'this.Show()'를 호출해도 창이 복원되지 않습니다. 좋을까, – jnylen

2

내가 MDI 형태의 형태를 복원하기 위해이 솔루션을 사용의 OnResize method을 이용하는 방법입니다. 먼저 정의해야합니다 :

[DllImport("user32.dll")] 
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); 

private const int SW_RESTORE = 9; 

을하고 오면 복원 :

ShowWindowAsync(this.MdiChildren[i].Handle, this.SW_RESTORE); 

이 추가 상태 홀더를 사용하지 않고 이전 상태로 양식을 복원합니다. 는 또한 흥미로운 this 기사

0

https://stackoverflow.com/a/6837421/578731 찾을 수 있습니다 :이 모두를 위해 작동

확실하지,하지만 나는이 오늘로 달려 팀의 someone는 "정상 당신이 시도해야"제안 ?

그가 옳았다는 것이 밝혀졌습니다. 다음은 창을 멋지게 복원하는 것 같습니다. 필요하다면 창을 최대화로 복원하면 문제가 없습니다. WindowState.Normal을 호출하면 최소화 된 상태를 먼저 확인하는 것이 중요합니다. 두 번째로 창이 최대화되지 않은 상태로 "복원"됩니다.

희망이 도움이됩니다.

관련 문제