2012-10-31 8 views
1

AutoScroll이 true로 설정된 폼이 있습니다. 폼의 일부 컨트롤은 폼이 시작될 때 보이지 않지만 위치는 이미 설정되어 있습니다. 컨트롤이 가시화되면 현재 위치는 현재 AutoScrollPosition에 상대적으로 계산됩니다. 이는 전혀 필요하지 않습니다.컨트롤이 표시 될 때 자식 스크롤 컨트롤이 자동 스크롤 폼에 다시 배치됩니다.

이 문제를 어떻게 방지 할 수 있습니까? 내가 시도

컨트롤이 처음 표시 될 때 다음과 같이 위치를 설정 :

void OnControlVisibleChanged(object sender, EventArgs e) 
    { 
     Control ctl = (Control)sender; 
     if (ctl.Visible) 
     { 
      ctl.Location = Point.Add(ctl.Location, new Size(this.AutoScrollPosition)); 
      ctl.VisibleChanged -= OnControlVisibleChanged; 
     } 
    } 

그것은 일부 컨트롤을 위해 작동하고, 다른 사람 없습니다. 나는 이유를 모른다.
편집 : 컨트롤이 보이게되면 실제 AutoScrollPosition은 변경되지만 AutoScrollPosition 속성은 즉시 업데이트되지 않는 것으로 보입니다.

+1

'AutoSize = True'가있는 컨트롤은 그 영향을받지 않습니다. 수정없이 패널에 올바르게 배치됩니다. – LarsTech

+0

@LarsTech 노력에 감사드립니다. 나는 당신의 결론을 듣고 싶습니다. – RoadBump

답변

1

AutoSize = True은 코드를 간섭하는 것 같습니다. 그게 유일한 실패 지점인지 모르겠지만 내 테스트에서 작동했습니다.

void OnControlVisibleChanged(object sender, EventArgs e) { 
    Control ctl = (Control)sender; 
    if (ctl.Visible) { 
    bool moveOK = true; 
    if (ctl.GetType().GetProperty("AutoSize") != null) { 
     if ((bool)ctl.GetType().GetProperty("AutoSize").GetValue(ctl, null)) { 
     moveOK = false; 
     } 
    } 
    if (moveOK) { 
     ctl.Location = Point.Add(ctl.Location, new Size(this.AutoScrollPosition)); 
    } 
    } 
} 
+0

와우, 이건 내 사건이야! 모든 것이 이제 완벽하게 작동합니다. 나는 이것을 생각하지 않을 것이다. 대단히 감사합니다. – RoadBump