我討厭兩個richTextBoxs
。C中滾動條的兩個問題#
我有兩個問題:
不管我怎麼定義滾動條 - 它不apear。如果我寫入的行數超過了行的長度 - 光標移動到下面的行 - 我希望所有內容都寫入同一行,用戶可以使用滾動條左右移動。
我想要一個滾動條來控制兩個richtextbox。 一個水平的兩個,一個垂直的兩個。
我討厭兩個richTextBoxs
。C中滾動條的兩個問題#
我有兩個問題:
不管我怎麼定義滾動條 - 它不apear。如果我寫入的行數超過了行的長度 - 光標移動到下面的行 - 我希望所有內容都寫入同一行,用戶可以使用滾動條左右移動。
我想要一個滾動條來控制兩個richtextbox。 一個水平的兩個,一個垂直的兩個。
最好的方法來解決你的第二個問題是使用GetScrollInfo和SetScrollInfo。我認爲你應該能夠處理HScroll
和VScroll
事件,當他們觸發時,你必須在第二個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.aspx和http://msdn.microsoft.com/en-us/library/ms644950%28VS.85%29.aspx
也有一些很好的例子在pinvoke.net(例如 GetScrollInfo)
你可以發佈你的代碼嗎? – Oded 2010-11-25 11:18:38
也許你的界面截圖?我在查看第二個請求的外觀時遇到問題。 – 2010-11-25 11:21:42