【问题标题】:Hide scrollbars of a RichTextBox隐藏 RichTextBox 的滚动条
【发布时间】:2010-12-09 19:41:50
【问题描述】:

我正在尝试编写一个像 DarkRoom 这样的简单文本编辑器,其中只有一个 RichTextBox(或 TextBox)。我的问题是除非我有垂直滚动条,否则我不能使用鼠标滚轮进行滚动。有什么办法可以隐藏这个滚动条并且仍然可以用鼠标滚轮滚动吗?

到目前为止,我有几个想法如何做到这一点,但不知道如何实现它们。

  • 使用 MouseWheel 事件重新创建滚动代码
  • 更改滚动条的视觉样式以将其隐藏或使其不可见
  • 编写我自己的 TextBox 小部件
  • 将滚动条与其他东西重叠以隐藏它们

P.S.:不能使用任何 win32 的东西。

【问题讨论】:

    标签: c# .net winforms user-interface


    【解决方案1】:

    是的,您必须捕获 .MouseWheel 和 .MouseMove 事件。见this post

    好的,请执行以下操作:

    1. 在表单加载事件中添加一行。

      private void Form1_Load(object sender, EventArgs e)
      {
          this.richTextBox1.MouseWheel += new MouseEventHandler(richTextBox1_MouseWheel);
      }
      
    2. 在鼠标滚轮事件中添加以下内容。

      void richTextBox1_MouseWheel(object sender, MouseEventArgs e)
      {
          if (e.Delta > 0)
          {
              //Handle mouse move upwards
              if (richTextBox1.SelectionStart > 10)
              {
                  richTextBox1.SelectionStart -= 10;
                  richTextBox1.ScrollToCaret();
              }
          }
          else
          {
              //Mouse move downwards.
              richTextBox1.SelectionStart += 10;
              richTextBox1.ScrollToCaret();
          }
      }
      

    如果您想要相同的运行样本,请在任何一种情况下告诉我;或者如果您不喜欢该解决方案(0:

    【讨论】:

    • 这并没有解释如何进行滚动部分。那就是我现在被困住了。
    • 这不是我正在寻找的正确滚动行为。滚动时插入符号的位置不应改变。但即使我将 SelectionStart 设置回原始值,我也不会得到正确的行为。如果我知道顶部的可见线从哪个字符位置开始或底部的线结束,它可能会起作用。但是,仅将 SelectionStart 值增加/减少一个常数是行不通的。在对此进行测试时,我还注意到如果插入符号已经可见,则 ScrollToCaret 将上下滚动几个像素。
    • 感谢莫里斯的反馈。实际上,根据您的问题“有没有办法隐藏这个滚动条并且仍然可以使用鼠标滚轮?”;由于您不知道如何做到这一点,因此我想为您提供一个起点,而我并不打算为您提供完整的解决方案。同样,常量值仅供您了解其工作原理。
    • 好吧,那我应该措辞有点不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2014-11-17
    • 2014-04-07
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多