2011-10-31 2 views
0

텍스트가 업데이트 될 때 스크롤바가 아래쪽으로 이동하도록 스택 오버플로에서 제안한 모든 답변을 시도했지만 스레드 내부에 있기 때문에 작동하지 않는 느낌이 들었습니다. 내 코드가 아래에 있습니다 ...TextBox 스크롤 막대. 스레드 내 TextBox 끝으로 스크롤

foreach(HtmlAgilityPack.HtmlNode paginationUser in paginationUsers) { 
        String userUrl = paginationUser.GetAttributeValue("id",""); 
        this.Invoke((MethodInvoker)delegate { 
         txtLog.AppendText("...... Added " + userUrl + Environment.NewLine); 
         txtLog.Select(txtLog.Text.Length, 0); 
         txtLog.ScrollToCaret(); 

        }); 
       } 

코드가 작동하지 않는 원인은 무엇입니까? 더 나은 솔루션은 무엇입니까?

+0

SA는 무엇입니까? 우리는 더 자세한 정보가 필요합니다. –

+0

죄송합니다, SA는 Stack Overflow를 나타냅니다.) –

+1

당신은 무엇을 말하고 있습니까? –

답변

0

이 코드를 추가해보십시오 :

TextBox.SelectionStart = txtLogEntries.Text.Length; 
    TextBox.ScrollToCaret(); 

onTextChanged 텍스트 상자 이벤트에서.

TextBox.AppendText("your text") 
가 자동으로 새로 추가 된 텍스트 &의 끝으로 스크롤합니다

가 자동 스크롤 애니메이션이 많은 것 같다 부드러운 TextBox.ScrollToCaret() 방법에 비해

당신은 넣을 수 있습니다 :이 코드를 사용하여 느낌

0

더 낫다 TextChanged TextBox 이벤트에서이 코드

0

텍스트 상자에 쓰는 스레드를 사용하여 WPF에서 동일한 문제가 발생합니다. ScrollToEnd를 추가 할 때까지 제대로 작동합니다.

해결 방법이 없으므로 약간의 의견이 있습니다.

컨트롤을 잠그지 않았습니다. 당신이 트레드에서 그것을 채우고 있다면 당신은해야합니다. Invoke를 사용하면 제대로 작동하지만 UI가 응답하지 않게됩니다. BeginInvoke를 사용하는 것이 더 부드럽지만 ScrollToEnd를 사용하면 완전히 고정됩니다.

일종의 트리거링 문제인 것처럼 보이며 한 이벤트가 다른 이벤트를 유발합니다.

텍스트를 느리게 먹여보고 무슨 일이 일어나는지보십시오. 작업자 스레드가 텍스트 상자에 넘쳐 흐르고있어 주 스레드가 그 일을 할 수 없도록하는 것이 매우 힘듭니다.