使用滚动条向下或向上控制richtextbox内部

时间:2013-09-07 19:39:21

标签: c# winforms

在我的richtextbox内部有一个checkbox,向下滚动或向上滚动我的richtextbox时,复选框不会滚动它。

CheckBox chk = new CheckBox();
chk.Name = "Chk" + i;
chk.Location = new Point(80,10+i);
chk.Text = "Save";
chk.Size = new System.Drawing.Size(20, 100);
richTextBox1.Controls.Add(chk);
i++;

你能告诉我如何解决它。

3 个答案:

答案 0 :(得分:2)

RichTextBox不能包含CheckBox个对象。并且您已为检查点的位置设置静态点

chk.Location = new Point(80,10+i)

,它已超过RichTextBox,而不是

答案 1 :(得分:1)

您可以处理MouseWheel的{​​{1}}和Scroll事件,并使用RichTextBox win32函数获取GetScrollPos滚动条的新位置},然后相应地更新RichTextBox的位置。请注意,当CheckBox被引发时,ScrollBar的位置不会立即更改为新的位置,它将从当前位置顺利更改为新位置。这就是为什么我们必须使用MouseWheel来定期反复调用Timer直到返回位置相同。我们得到的效果并不完美,因为滚动条移动的平滑度,但它接近于平滑度,远远优于在GetScrollPos事件处理程序中调用GetScrollPos一次。

但是在这段代码中,我想使用MouseWheel挂钩到消息循环并获取发送到NativeWindow的消息,这里的代码工作正常,这段代码只是一个演示并仅处理RichTextBox。您可以在Vertical scrollingWM_HSCROLL上找到更多信息来处理GetScrollPos(这很简单,因为它与Horizontal scrolling非常相似):

Vertical scrolling

答案 2 :(得分:0)

很可能你已经在组合框或下拉列表中看到了复选框。 有可能做到这一点。您可以尝试使用this之类的第三方控件,也可以编写自己的代码。这个主题已经在另一个关于SO的问题中进行了讨论,看看here,所以我们不会重新讨论这个问题中的同一个主题。

您使用代码获得的只是将图形控件放在另一个控件上,但它们不会相互交互。它们是两个独立的控件。