2010-11-25 77 views
-1

我討厭兩個richTextBoxsC中滾動條的兩個問題#

我有兩個問題:

  1. 不管我怎麼定義滾動條 - 它不apear。如果我寫入的行數超過了行的長度 - 光標移動到下面的行 - 我希望所有內容都寫入同一行,用戶可以使用滾動條左右移動。

  2. 我想要一個滾動條來控制兩個richtextbox。 一個水平的兩個,一個垂直的兩個。

+1

你可以發佈你的代碼嗎? – Oded 2010-11-25 11:18:38

+0

也許你的界面截圖?我在查看第二個請求的外觀時遇到問題。 – 2010-11-25 11:21:42

回答

2
  1. 你需要的MultiLine屬性設置爲false(默認爲true的RichTextBoxes)如果你只是想一個行,否則WordWrap屬性設置爲false(這也默認爲true) 。
  2. 我想你需要處理每個RichTextBox的HScrollVScroll事件,並在事件處理程序滾動其他文本框相同的數量。不知道這是多麼容易,雖然...
0

最好的方法來解決你的第二個問題是使用GetScrollInfo和SetScrollInfo。我認爲你應該能夠處理HScrollVScroll事件,當他們觸發時,你必須在第二個RichTextBox中設置新的ScrollInfo。

你也需要WM_SendMessage來完成這項工作。 (所有usuable與進口的User32.dll

平時的工作要做:

入門通知當用戶滾動(Scrollevents),並設置新SCROLLINFO到第二RichTextBox的。設置ScrollInfo後,您需要發送消息到滾動條/控制滾動。所有的

首先,你需要你 「自己」 SCROLLINFO struct

[StructLayout(LayoutKind.Sequential)] 
    struct SCROLLINFO 
    { 
     public uint cbSize; 
     public uint fMask; 
     public int nMin; 
     public int nMax; 
     public uint nPage; 
     public int nPos; 
     public int nTrackPos; 
    } 

然後在ScrollingEvent在第一個TextBox得到SCROLLINFO:

GetScrollInfo(this.Handle, SB_VERT, ref _si); 

(其中_si是你SCROLLINFO實例)。然後將消息發送到滾動條

_si.nPos = 0815; //Your wanted new ScrollbarPosition (I think you can use the value of the first Scrollbar) 
       //// Reposition scroller 
       SetScrollInfo(Handle, SB_VERT, ref _si, true); 

       //// Send a WM_VSCROLL scroll message using SB_THUMBTRACK as wParam 
       //// SB_THUMBTRACK: low-order word of wParam, si.nPos high-order word of wParam 

       IntPtr ptrWparam = new IntPtr(SB_THUMBTRACK + 0x10000 * _si.nPos); 
       IntPtr ptrLparam = new IntPtr(0); 
       SendMessage(Handle, WM_VSCROLL, ptrWparam, ptrLparam);  

哪裏HANDLE是您的RichTextBox的句柄,有滾動 - 你可以使用

RichTextBox.Handle 

你真的應該看看得到隨時手柄http://msdn.microsoft.com/en-us/library/bb787537%28VS.85%29.aspxhttp://msdn.microsoft.com/en-us/library/ms644950%28VS.85%29.aspx

也有一些很好的例子在pinvoke.net(例如 GetScrollInfo