2013-02-10 4 views
0

나는 사용자 정의 컨트롤을 동적으로 추가하는 패널이 있습니다. 컨트롤 패널 경계 밖으로 이동하는 경우, 수평/수직 스크롤이 자동으로 (AutoScroll == true)를 보여주고 스크롤바는 다음과 같은 코드를 통해 컨트롤을 따릅니다 : 주위 tempNode을 이동하면서스크롤 막대 상태/위치 저장

if(panelDiagram.VerticalScroll.Visible || panelDiagram.HorizontalScroll.Visible) { 
    panelDiagram.ScrollControlIntoView(tempNode); 
} 

이 방법, 스크롤바가 그것을 따를 것이다.

데이터베이스에서 모든 항목을 다시로드 할 때 스크롤 막대의 상태를 유지할 수있는 방법이 있습니까? 내가 ScrollControlIntoView(lastAddedControl) 같은 많은 것들을 시도했지만 아무것도 작동하지 않습니다. 어쩌면 AutoScroll을 끄고 모든 것을 내 손으로 관리해야합니까?

답변

0

Panel이 몇 가지 속성을 유용하게 찾을 수있는 노출 ScrollableControl에서 파생 :

  • AutoScrollPosition
  • VerticalScroll
  • HorizontalScroll

그것은 autoScrollPosition처럼 보이는 것은 필요하시면 ; Point 인스턴스에 각 스크롤 막대의 현재 X 및 Y 스크롤 좌표가 포함되어 있습니다. X은 수직 스크롤 만하는 경우 0입니다. , Y 혼자 AutoScrollPosition X를 저장하고 작업을하지 않습니다 다시로드

public override void OnLoad(Object sender, EventArgs e) { 

    this.panel1.AutoScrollPosition = GetSavedScrollPoint(); 

} 

public override void OnFormClosing(Object sender, EventArgs e) { 

    SavePointSomewhere(this.panel1.AutoScrollPosition); 
} 
+0

: 그래서 같은 그것을 저장

. 필요한 경우 스크린 샷을 제공 할 수 있습니다. – prettyvoid

+0

'AutoScrollPosition'은 구조체이므로 필드를 개별적으로 설정할 수 없으므로 구조체 인스턴스 전체를 바꿔야합니다. – Dai

+0

그건 문제가 아니야. AutoScrollPosition을 새 Point (x, y)로 설정했지만 결과가 올바르지 않습니다. – prettyvoid