C#에서 "멀티 스크린"응용 프로그램을 작성하고 있습니다. "화면"은 설정, 제한된 액세스, 관리 등 프로그램의 다른 영역을 나타냅니다.패널 간 전환 문제 (C# WinForms)
문제는 내가 한 패널과 다른 패널 사이를 전환 할 때 발생합니다. 전환 과정에서 전체 양식이 순간적으로 고장 나고 일부 컨트롤의 윤곽을 볼 수 있습니다. 패널의 모든 텍스트는 다른 패널의 배경과 블록으로 나타나며 다른 이상한 일이 발생합니다.
여기
는 여기내가 전환하고있어 패널이 같아야하는거야 ... 내가 설명하기 위해 노력하고있어 일부 스크린 샷입니다 :
하고 여기에서 발생하는 상황 천이 과정 :
나는 그럴 필요하는 데 사용하는 기능을 가지고 패널 사이의 위치. 코드는 다음과 같습니다 :
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
비슷한 질문이있는 경우 (주위를 둘러 보았습니다) 또는 행성에서 가장 큰 실수를 범한 경우 사과드립니다. ..
내가 강하게 거의 아무것도 윈폼 대신 WPF를 추천 볼 수 없습니다 것을 의미한다. DirectX 기반 하드웨어 가속 때문에 이러한 문제가 발생하지 않습니다. BTW에서는 수십 개의 다른 애니메이션 전환을 지원하는 'TransitionPresenter'가 포함 된 [WPF Bag of Tricks] (https://github.com/thinkpixellab/bot)를 사용할 수 있습니다. [여기] (http://www.youtube.com/watch?v=q60fF2rZUiU)는 이러한 전환의 예입니다. –
다른 스레드에서 이것을 호출합니까? 그렇지 않다면, panel1이 현재 보여지고 있고 panel2가 숨겨져 있다고 가정하고,'private void TogglePanels() {panel1.Visible =! panel1.Visible; panel2.Visible =! panel2.Visible; }'. 그러나 패널에 많은 양의 컨트롤이 있거나 더 느린 시스템을 사용하는 경우 WinForms에서 일종의 지연을 거의 고려할 수 있습니다. –
가끔은 다른 스레드에서 호출하지만 주로 응용 프로그램 스레드에서 호출하는 경우가 있습니다. – JJC