2009-03-21 2 views
0

richtextbox 및 스크롤 막대가있는 폼이 있습니다. 내 선택을 잃지 않고 텍스트 상자에 텍스트를 계속 추가 할 수 있기를 원합니다. 텍스트를 추가하고 다시 설정하기 전에 selectionstart 및 selectionlength를 저장할 수 있습니다. 문제는 그것이 역순으로 선택하는 것입니다. 내가 할 수있는 최선의 방법은 선택 위치를 올바른 위치로 다시 설정하는 것이지만 텍스트를 다시 선택하도록 마우스를 움직여야합니다. 내가 텍스트 추가 전후에 다음과 같은 기능을 사용하고 있습니다 : 텍스트를 추가 한 후 내 스크롤 위치가 완료 하단에없는 경우richtextbox (vb.net)에서 프로그래밍 방식으로 텍스트를 선택 취소

Private Sub StopRepaint() 
Dim pt As Point 
' Stop redrawing: 
SendMessage(txtchat.Handle, WM_SETREDRAW, 0, pt) 
' Stop sending of events: 
eventmask = SendMessage(txtchat.Handle, EM_GETEVENTMASK, 0, pt) 
End Sub 

Private Sub StartRepaint() 
Dim pt As Point 
' turn on events 
SendMessage(txtchat.Handle, EM_SETEVENTMASK, 0, pt) 
' turn on redrawing 
SendMessage(txtchat.Handle, WM_SETREDRAW, 1, pt) 
' this forces a repaint, which for sotxtchat reason is necessary in sotxtchat cases. 
txtchat.Invalidate() 
End Sub 

을, 나는이를 사용하여 다시 설정 해요 :

If Not isbottom(getpos) Then 
    PostMessageA(txtchat.Handle, WM_VSCROLL, SB_THUMBPOSITION + _ 
         &H10000 * getpos(), Nothing) 
End If 

내 주요 목표는 richtextbox에 새 텍스트를 추가하는 경우에도 텍스트를 선택하고 복사 할 수있게하는 것입니다. 누구든지 올바르게 역순으로 텍스트를 선택하는 방법을 알고 있거나 선택 해제중인 텍스트에 대한 내 문제를 쉽게 해결할 수 있습니까? 감사.

답변

1

나는 "선택 가능한 블록"이 다음 블록의 독립적 인 텍스트의 각 추가 된 슬랩을 유지하려고 시도 할 것이다. MSN 메신저와 비슷합니다. "패널"을 매끄럽게 보이게 만들 수 있으며 stringbuilder를 사용하면 최종 블록을 단일 스트림으로 안전하게 내보낼 수 있습니다.

관련 문제