2013-08-14 2 views
0

소유 양식으로 새 양식을 여는 양식의 단추가 있습니다. (아래보다 그것은 매우 간단합니다, 다른 논리 없음)최대 소유 된 양식이 올바르게 복원되지 않습니다.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     Form form = new Form(); 
     form.Show(this); 
    } 
} 

내 문제는 다음과 같다 :

  1. 나는 소유 형태의 인스턴스를 가져 와서 자신의 모니터로 드래그 버튼을 클릭하면 .
  2. 원래 기본 양식을 복원 원래 기본 폼 (Form1)
  3. 을 최소화 소유 형태
  4. 을 극대화 (Form1에)

그런 다음에 최대 소유 형태는 더 이상 극대화 없지만 상태를 가지고있다 복원 정상의.

편집 : 소유자/소유 관계를 깨뜨릴 수 없어 소유 양식은 도구 창으로 표시됩니다. 그것은 winforms 함께 일이 될 수 있지만 VS 동작을 올바르게 이후 올바른 수 및 최대 대신 최대화 창을 복원 할 수 있어야합니다 알아요.

+0

나는 복원 된 이벤트에 대한 메시지 대기열을 들으려고했지만 소유 한 양식이 아닌 기본 양식으로 만 수신합니다. 그 시점에서 소유 형태의 상태를 확인할 때 제대로 최대화됩니다. –

+0

소유자와 소유주로 행동하지 않을 경우, 왜 그렇게합니까? "소유하지 않음"상태로두면 원하는대로 처리됩니다. – DonBoitnott

+0

소유 양식은 기본 양식이 보이는 경우에만 표시해야하는 도구 창으로 스타일이 지정됩니다. –

답변

1

여기에 하나의 가능성은 ...

추적하기 위해 소유 형태에 속성을 추가 마지막 FormWindowState (당신이 그것을 노출 상관하지 않는 경우 단지 private를 수) :

private FormWindowState _lastState; 
public FormWindowState LastWindowState { get { return _lastState; } } 

추가 소유 형태에 WndProc에 대한 재정의 :

protected override void WndProc(ref Message message) 
{ 
    const Int32 WM_SYSCOMMAND = 0x0112; 
    const Int32 SC_MAXIMIZE = 0xF030; 
    const Int32 SC_MINIMIZE = 0xF020; 
    const Int32 SC_RESTORE = 0xF120; 

    switch (message.Msg) 
    { 
    case WM_SYSCOMMAND: 
     { 
     Int32 command = message.WParam.ToInt32() & 0xfff0; 
     switch (command) 
     { 
      case SC_MAXIMIZE: 
      _lastState = FormWindowState.Maximized; 
      break; 
      case SC_MINIMIZE: 
      _lastState = FormWindowState.Minimized; 
      break; 
      case SC_RESTORE: 
      _lastState = FormWindowState.Normal; 
      break; 
     } 
     } 
     break; 
    } 

    base.WndProc(ref message); 
} 

마지막으로, 소유 형태의 VisibleChanged 이벤트에 대한 처리기를 추가 :

private void Form2_VisibleChanged(object sender, EventArgs e) 
{ 
    WindowState = _lastState; 
} 
+0

나는 소유 형태의 모든 상태를 저장하면서 이것을 시도했다. 슬프게도 당신은 어디에서 무엇을 할 수 있겠는가? 그러나 이것 이후에 무엇인가가 발생한다. (소유 형태를 다시 극대화한다) –

+0

나는이 마지막 단계를 재현 할 수 없다. 자신의 코드에 없는지 확인하십시오 (간접적 인 호출 결과로 인해 실수로). 내 테스트 애플 리케이션에서 복원 스틱 예상대로. – DonBoitnott

+0

뭔가 잘못 했음에 틀림 없어, 해결책이 효과가있다. –