gpt4 book ai didi

c# - 两个富文本框的同步滚动 (C#)

转载 作者:太空狗 更新时间:2023-10-29 23:50:42 26 4
gpt4 key购买 nike

我需要一些帮助。目前,我正在使用 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) 将不会跟随第一个,除非我释放滚动条。

最佳答案

如果应用程序滚动窗口的内容,它还必须使用 SetScrollPos 函数重置滚动框的位置看看这个: https://msdn.microsoft.com/en-in/library/aa926329.aspx

此外,WM_VSCROLL 消息仅携带 16 位的滚动框位置数据,这可能是您应该尝试 GetScrollInfo 的原因,因为它具有 32 位的滚动框位置数据。这可能会解决您的两个问题。希望这有助于...

关于c# - 两个富文本框的同步滚动 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29902028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com