2009-04-20 2 views
1

여러 개의 탭 페이지가있는 tabcontrol이 있습니다. InputPanel.EnabledChanged 이벤트에 연결하여 입력 패널이 활성화되었을 때 tabcontrol의 크기가 조절되도록했습니다. 내가하고 싶은 것은 탭 페이지의 크기를 조정할 때 포커스가있는 컨트롤이 보이는지 확인하는 것입니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까? .NET Compact Framework를 사용하고 있습니다.컨트롤이 스크롤 컨트롤 안에있을 때 컨트롤이 표시되도록하려면 어떻게해야합니까?

덕분에, 내 마음에 오는 MRB

답변

1

당신은 당신이 필요 몇 가지가/여기를 추적 할 수 있습니다 :

• 현재 스크롤 위치
• 태핑 요소 (나는 텍스트 상자를 가정)가
그것을 도청 할 때의 위치
InputPanel에 대한 EnabledChanged 이벤트는 다루기가 매우 쉽습니다. (이미 해본 것으로 가정합니다.) InputPanel의 Enabled 상태를 확인하고 + 또는 =를 TabControl의 Height로 변경하여 InputPanel이 아닌지 확인하십시오 무엇이든 다 망라.

필자의 최우선 시나리오는 tabcontrol 크기가 조정될 때 화면 밖으로 이동된다는 것이므로 텍스트 상자의 위치를 ​​확인하는 것이 문제입니다.

tabcontrol의 크기를 조정하면 tabcontrol 내용의 상단이 계속 보일 것이라고 생각합니다. 이제는 InputPanel에서 "덮어 쓴"내용을 보려면 아래로 스크롤해야합니다.

EnabledChanged 이벤트에서 수행하고자하는 것은 두드린 컨트롤의 위치 (또는 탭 된 화면 좌표 - 가장 쉬운 것이 무엇이든)입니다. 위험 영역 (ClientSize.Height-InputPanel.Bounds.Height, ClientSize.Height) 내에 있으면 스크롤을 조정해야합니다.

이 반 C# - 절반 - 의사하지만 당신은 내가 함께 갈거야 어디에서 볼 수 있어야합니다 :

INT yOffset = 상단 y 좌표를 탭 컨트롤의;
경우 (yOffset> ClientSize.Height-inputPanel.Bounds.Height)
{
      INT yShift = 모든 업 시프트 량;
      포인트 scrollPosition = AutoScrollPosition;
      scrollPosition.Y = scrollPosition.Y - yShift;
      AutoScrollPosition = scrollPosition;
}이 간단히 말해서, 무엇을

는, 검사는 InputPanel는 원하는 컨트롤을 은폐하려고, 그렇다면, yShift이 inputPanel의 전체 높이 수 있습니다 yShift 픽셀에 의해 스크롤되는 경우 또는 당신이 원하는대로 컨트롤을 간신히 보여주기에 충분합니다.
• .NET CF는 유효하지 않은 스크롤 규칙을 설정하는 것에 매우 관대합니다. 10 픽셀 위로 스크롤 할 수 있고 100까지 스크롤하도록 말하면 10에서 멈 춥니 다.
• 화면 좌표 (0,0)는 보이는 화면의 왼쪽 상단입니다 - 표시되는 양식이 아닙니다. 양식의 맨 위에 (0,0) 있다고 가정하면 문제가 발생할 수 있습니다.

0

있는 유일한 방법은 화면에 currrent 컨트롤 위치하여이를 계산이다.

관련 문제