관련 질문을 검색했지만 필요한 것을 찾을 수 없습니다.RichTextBox Visual Studio에서 세로 스크롤 막대 조작
richtextbox 컨트롤이 있습니다. 세로 스크롤 막대가 특정 위치 (예 : 아래쪽 아래로 90 %)에 도달하면 이벤트를 트리거해야합니다. 나는 부유 한 텍스트 박스를위한 이벤트를 가지고 놀았지만 아직 아무것도 찾지 못했다.
도움을 주시면 감사하겠습니다.
관련 질문을 검색했지만 필요한 것을 찾을 수 없습니다.RichTextBox Visual Studio에서 세로 스크롤 막대 조작
richtextbox 컨트롤이 있습니다. 세로 스크롤 막대가 특정 위치 (예 : 아래쪽 아래로 90 %)에 도달하면 이벤트를 트리거해야합니다. 나는 부유 한 텍스트 박스를위한 이벤트를 가지고 놀았지만 아직 아무것도 찾지 못했다.
도움을 주시면 감사하겠습니다.
당신은 스크롤 위치를 결정하기 위해 기능
private static double GetRichTextBoxScrolPos(RichTextBox textBox)
{
if(textBox1.TextLength == 0) return 0;
var p1 = textBox.GetPositionFromCharIndex(0);
var p2 = textBox.GetPositionFromCharIndex(textBox.TextLength - 1);
int scrollPos = -p1.Y;
int maxScrolPos = p2.Y - p1.Y - textBox.ClientSize.Height;
if(maxScrolPos <= 0) return 0;
double d = 100.0 * (double)scrollPos/(double)maxScrolPos;
if(d < 0) d = 0;
else if(d > 100) d = 100;
return d;
}
에게 수직 스크롤을 감지하고 사용하는 VScoll
이벤트를 처리 할 수 있습니다. 결과는 %로 표시됩니다 (100 % = 완전히 아래로 스크롤).
중요 사항 :이 기능은 반드시 정확하지는 않지만 결과는 정확합니다. 하단 라인 높이를 측정하여 더욱 향상시킬 수 있습니다 (예 : Graphics
개체 사용). 100 % 신뢰할 수있는 방법은 WinAPI를 사용하여 VScrollBar
을 처리하고 위치를 쿼리하는 것이지만 훨씬 더 많은 작업이 필요합니다.
고마워요! 나는 몇 분 안에 그것을 시도 할 것이다 : – Kizaru
좋아, 이것은 작동하는 것 같다. 함수가 이벤트에서 자주 호출되는 유일한 문제입니다. 5 초마다 하나의 통화로 기능을 제한 할 수있는 방법이 있습니까? 그것은 텍스트 상자를 다시 설정하면 거의 무한히 호출 된 것 같습니다. – Kizaru
VScroll 이벤트를 업데이트하려고 할 때 구독을 취소하고 업데이트 후 다시 구독 할 수 있습니다. 시간에 따른 호출 수를 제한해야하는 경우 함수 결과와 호출 시간을 2 개의 변수로 캐시 할 수 있으며 5 초 이내에 호출 된 경우 이전 결과가있는 함수에서 빠르게 복귀 할 수 있습니다. – max
빠른 설명, WPF 또는 WinForms를 사용하고 있습니까? – Dennis
Visual Studio의 WinForms – Kizaru