2013-08-09 3 views
0

C#에서 "멀티 스크린"응용 프로그램을 작성하고 있습니다. "화면"은 설정, 제한된 액세스, 관리 등 프로그램의 다른 영역을 나타냅니다.패널 간 전환 문제 (C# WinForms)

문제는 내가 한 패널과 다른 패널 사이를 전환 할 때 발생합니다. 전환 과정에서 전체 양식이 순간적으로 고장 나고 일부 컨트롤의 윤곽을 볼 수 있습니다. 패널의 모든 텍스트는 다른 패널의 배경과 블록으로 나타나며 다른 이상한 일이 발생합니다.

여기

여기

내가 전환하고있어 패널이 같아야하는거야 ... 내가 설명하기 위해 노력하고있어 일부 스크린 샷입니다 :

enter image description here

하고 여기에서 발생하는 상황 천이 과정 :

enter image description here

나는 그럴 필요하는 데 사용하는 기능을 가지고 패널 사이의 위치. 코드는 다음과 같습니다 :

delegate void DtransPanel(object pan1, object pan2); 
    private void transPanel(object hide, object show) 
    { 
     if (InvokeRequired) Invoke(new DtransPanel(transPanel), new object[] { hide, show }); 
     else 
     { 
      Panel h = (Panel)hide; 
      Panel s = (Panel)show; 
      h.Hide(); 
      Application.DoEvents(); 
      s.Show(); 
     } 
    } 

저는 그래픽과 같은면에서 초보자입니다. 위의 함수를 사용하는 것보다 더 좋은 방법이있을 수 있습니다. P

비슷한 질문이있는 경우 (주위를 둘러 보았습니다) 또는 행성에서 가장 큰 실수를 범한 경우 사과드립니다. ..

+1

내가 강하게 거의 아무것도 윈폼 대신 WPF를 추천 볼 수 없습니다 것을 의미한다. DirectX 기반 하드웨어 가속 때문에 이러한 문제가 발생하지 않습니다. BTW에서는 수십 개의 다른 애니메이션 전환을 지원하는 'TransitionPresenter'가 포함 된 [WPF Bag of Tricks] (https://github.com/thinkpixellab/bot)를 사용할 수 있습니다. [여기] (http://www.youtube.com/watch?v=q60fF2rZUiU)는 이러한 전환의 예입니다. –

+0

다른 스레드에서 이것을 호출합니까? 그렇지 않다면, panel1이 현재 보여지고 있고 panel2가 숨겨져 있다고 가정하고,'private void TogglePanels() {panel1.Visible =! panel1.Visible; panel2.Visible =! panel2.Visible; }'. 그러나 패널에 많은 양의 컨트롤이 있거나 더 느린 시스템을 사용하는 경우 WinForms에서 일종의 지연을 거의 고려할 수 있습니다. –

+0

가끔은 다른 스레드에서 호출하지만 주로 응용 프로그램 스레드에서 호출하는 경우가 있습니다. – JJC

답변

0

는 다음을 사용하여 시도 할 수 :

Panel h = (Panel)hide; 
Panel s = (Panel)show; 
h.Hide(); 
s.SuspendLayout(); 
s.Show(); 
s.ResumeLayout(); 

이 당신이이