C# 使用WndProc消息以编程方式滚动文本框
我正在尝试使用表单的WndProc方法滚动文本框。到目前为止,我在搜索互联网后得出的代码如下所示:C# 使用WndProc消息以编程方式滚动文本框,c#,winforms,C#,Winforms,我正在尝试使用表单的WndProc方法滚动文本框。到目前为止,我在搜索互联网后得出的代码如下所示: private void ScrollTextBox() { scrollMessage = Message.Create(TabContents.Handle, 0x00B6, new IntPtr(0x0003), new IntPtr(0x0000)); this.WndProc(ref scrollMessage); } 其中TabContents是一个文本框 由于某种原
private void ScrollTextBox()
{
scrollMessage = Message.Create(TabContents.Handle, 0x00B6, new IntPtr(0x0003), new IntPtr(0x0000));
this.WndProc(ref scrollMessage);
}
其中TabContents是一个文本框
由于某种原因,调用此方法时不会发生任何事情。我想知道为什么。我意识到我可以用MoveToCaret方法实现同样的效果,但我很好奇为什么这不起作用
编辑:
正如Beaner发布的答案一样,我使用SendMessage编写了另一个方法:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
private void ScrollTextBox2(int lines)
{
SendMessage(TabContents.Handle, 0x00B6, new IntPtr(0), new IntPtr(lines));
}
这似乎100%有效。我仍然很好奇为什么这个.WndProc(ref message)不起作用,因为一条消息是用相同的参数集创建的。这是可能的,但我从未尝试过这种方法。我使用了SendMessage将windows消息直接发送到文本框以引起滚动
private const int WM_VSCROLL = 0x115;
private const int SB_BOTTOM = 7;
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam,
IntPtr lParam);
// Scroll to the bottom, but don't move the caret position.
SendMessage(TabContents.Handle, WM_VSCROLL, (IntPtr) SB_BOTTOM, IntPtr.Zero);
我在堆栈溢出上发现了这个问题:这可能解释了WndProc方法不起作用的原因。当不使用SendMessage时,消息似乎不会发送到windows内核。