2016-06-19 3 views
0

알림을 표시하는 디지털 사이 니지 응용 프로그램을 작성해야합니다. 텍스트가 사용자가 설계 할 수있는 기능을 갖게되면 서식있는 텍스트 상자 컨트롤에 대해 생각하고 텍스트가 자동으로 세로로 (예 : "뉴스"텍스트 상자) 스크롤됩니다. 아이디어가 있으십니까?RichTextBox 세로 자동 스크롤 텍스트

+0

코드까지? WM_SCROLL 메시지를 서식있는 텍스트 상자에 주기적으로 보낼 수 있습니다. 스크롤이 아래쪽을 칠 때 어떤 일이 발생해야합니까? HTML 페이지 (자바 스크립트에서 스크롤링을 처리 할 수 ​​있음)로 더 나은 제어가 가능하며 WebBrowser 컨트롤을 사용하여 VB.NET 프로그램에 표시 될 수 있습니다. – dlatikay

답변

0

좋아요. 나는 기차를 기다리는 동안 현재이 편지를 쓰고 있습니다. 그래서 이걸 시험하지는 않았지만, 이런 일이 트릭을해야합니다.

참고
당신이이
디버깅 목적을 제외하고 CheckForIllegalCrossThreadCalls = False로 설정하지 마십시오 CheckForIllegalCrossThreadCalls오류를 얻을 경우.
처음에는 아무 것도 눈치 채지 못하지만, CheckForIllegalCrossThreadCalls = False을 사용하면 나중에 트랙이 다운되는 문제가 발생할 수 있습니다.

모든 내용은 다음과 같습니다. 코드는 다음과 같습니다.

Public Class Form1 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    TextBox1.SelectionStart = 0 ''Change to a RichTextBox if you want. 
    ''Starting the background worker. 
    BackgroundWorker1.RunWorkerAsync() 
End Sub 

Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 
    ''BACKGROUND WORKER'' 
    For i = 0 To TextBox1.Text.Length 
     TextBox1.SelectionStart = i 
     System.Threading.Thread.Sleep(200)''changing the sleep time will make the textbox scroll to the right faster or slower. 
    Next 

End Sub 

Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted 
    ''Once completed, The background worker will start again. 
    TextBox1.SelectionStart = 0 
    BackgroundWorker1.RunWorkerAsync() 
End Sub 

Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing 
    ''This should stop the program from crashing when closing if the background worker is still running 
    BackgroundWorker1.CancelAsync() 
End Sub 
End Class 

참고
당신은 배경 노동자 또는 Loop이 완료 될 때까지 응답하지 않을 것입니다 다른 프로그램을 사용해야합니다.
다시 한번 CheckForIllegalCrossThreadCalls 오류가 발생하는 경우 Google에서 살펴본 후이 문제를 해결하기 위해 검색하십시오. 그러나 기꺼이 해결할 경우 CheckForIllegalCrossThreadCalls = False 이상 남겨 두어야합니다.

당신이 어떻게 가는지를 알려주세요. 나는 이것을 테스트하지 않았습니다. 그러나 아무도 당신에게 10 시간 안에 응답하지 않았기 때문에, 그것을 테스트 할 컴파일러없이 시도해 보았습니다.

+0

안녕하세요, 저는 이것을 시도하고 최대한 빨리 알려 드리겠습니다. 감사! – Kasper555

+0

아무런 문제가 없다. 내가 말하고있는 에러를 만났을 때, 모든 코드를 철저하게 다룰 때까지 그걸로 행복하게 살 수 있다면, 여기'checkForIllegalCrossThreadCalls = False'를 formload 서브에 추가하자. – Werdna

+0

왜 안 했어? 방금 처음부터 thread-safe하게 만들었습니까? :) –