Panel
로드로 Form
을 만들었습니다. 동적으로 생성 된 컨트롤을 표시 할 준비가 될 때까지이 로딩 패널을 표시하려고합니다.Controls 컬렉션에 동적으로 추가 할 때 winforms 컨트롤이 표시되지 않도록하기
처음에는로드 Panel
이 표시되고 나서 OnShown
이벤트 중에 컨트롤을 만들고이를 페이지에 추가하고 있습니다. 내가 OnShown
을 사용하는 이유는 Form
이 Mdi 시나리오에서 사용되고 있으므로 컨트롤을로드하기 전에 완전히 표시해야합니다 (Load 이벤트에서이 이벤트를 시도하면 Mdi 탭이 표시되지 않습니다. 컨트롤이로드 됨).
A) Visible 속성을 즉시 true로 설정 :
문제는 내가 때문에 나는 Controls
컬렉션에 내 컨트롤을 추가 할 때 사실이라고 생각 눈에 띄는 플리커가 있다는 것입니다. b) Z- 인덱스가 올바른 것처럼 보일지라도 로딩 패널 앞에 내 컨트롤이 나타나는 것 같습니다. 여기
Visible = true
을 설정할 수 있도록이
Visible = false
남아 것이라고 기대했다 문제
protected override void OnShown(EventArgs e)
{
Debug.WriteLine(loadingPanel.Visible); //true
Debug.WriteLine(Controls.GetChildIndex(loadingPanel)); //0
Debug.WriteLine(myControl.Visible); //false
myControl.Visible = false;
Controls.Add(myControl);
//**
Debug.WriteLine(myControl.Visible); //true
Debug.WriteLine(Controls.GetChildIndex(loadingPanel)); //0
Debug.WriteLine(Controls.GetChildIndex(myControl)); //1
Debug.WriteLine(loadingPanel.Visible); //true
base.OnShown(e);
}
의 덩어리입니다. 대신, 내 컨트롤을 볼 수있게되고 깜박입니다. 흥미롭게도, 어느 시점에서 loadingPanel.Visible = false
을 설정하지 않으면 컨트롤이로드를 완료하면 loadingPanel이 다시 나타나고 컨트롤을 숨 깁니다.
아이디어가 있으십니까?
추가가 완료 될 때까지 페인트 작업을 건너 뛰고 페인트 메서드를 무시하고 'OnShown' 메서드에서 플래그를 설정할 수 있습니다. 어둠 속에서 찌르기 만! – Charleh
@Charleh는 좀 더 정교하게 만들 수 있습니까? 시도할만한 가치가있는 것 같습니다.아마도 대답으로? – OffHeGoes