【发布时间】:2022-02-01 01:52:45
【问题描述】:
我需要一些帮助。 目前我正在使用 C# 编写脚本编辑器,我有两个富文本框:programTextBox,其中包含整个文本和linesTextBox,它计算并显示行数。
我希望它们同时滚动。我进行了一些搜索,实际上发现了一些有效的代码,但是如果有一些问题。代码如下:
public enum ScrollBarType : uint
{
SbHorz = 0,
SbVert = 1,
SbCtl = 2,
SbBoth = 3
}
public enum Message : uint
{
WM_VSCROLL = 0x0115
}
public enum ScrollBarCommands : uint
{
SB_THUMBPOSITION = 4
}
[DllImport("User32.dll")]
public extern static int GetScrollPos(IntPtr hWnd, int nBar);
[DllImport("User32.dll")]
public extern static int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
...
private void programTextBox_VScroll(object sender, EventArgs e)
{
int nPos = GetScrollPos(programTextBox.Handle, (int)ScrollBarType.SbVert);
nPos <<= 16;
uint wParam = (uint)ScrollBarCommands.SB_THUMBPOSITION | (uint)nPos;
SendMessage(linesTextBox.Handle, (int)Message.WM_VSCROLL, new IntPtr(wParam), new IntPtr(0));
}
它有效。有点儿。你可能会问:“有什么问题?”。嗯:
1) 当总行数变为大约 2500 行时,我的程序崩溃。我收到溢出错误。
2) 如果我使用滚动条而不是鼠标滚轮上下移动,那么除非我释放滚动条,否则我的第二个富文本框 (linesTextBox) 将不会跟随第一个。
【问题讨论】:
-
这里的解决方案:stackoverflow.com/a/8402026/2326824为我解决了溢出问题。
标签: c# winforms richtextbox text-cursor synchronized-scrolling