从富文本框控件获取当前滚动位置?

2024-04-05

我在互联网上进行了广泛的搜索,看到了很多这样的问题,但我还没有看到真正的答案。

我有一个富文本框控件,其中有很多文本。该控件中有一些法律信息。默认情况下,“接受”按钮被禁用。我想检测滚动事件是否垂直滚动条的位置位于底部。如果它位于底部,请启用该按钮。

如何检测当前垂直滚动条的位置?

谢谢你!

EDIT我正在使用 WinForms (.Net 4.0)


这应该会让您接近您正在寻找的东西。该类继承自 RichTextBox,并使用一些 pinvoking 来确定滚动位置。它添加了一个事件ScrolledToBottom如果用户使用滚动条或使用键盘滚动,则会触发该函数。

public class RTFScrolledBottom : RichTextBox {
  public event EventHandler ScrolledToBottom;

  private const int WM_VSCROLL = 0x115;
  private const int WM_MOUSEWHEEL = 0x20A;
  private const int WM_USER = 0x400;
  private const int SB_VERT = 1;
  private const int EM_SETSCROLLPOS = WM_USER + 222;
  private const int EM_GETSCROLLPOS = WM_USER + 221;

  [DllImport("user32.dll")]
  private static extern bool GetScrollRange(IntPtr hWnd, int nBar, out int lpMinPos, out int lpMaxPos);

  [DllImport("user32.dll")]
  private static extern IntPtr SendMessage(IntPtr hWnd, Int32 wMsg, Int32 wParam, ref Point lParam);

  public bool IsAtMaxScroll() {
    int minScroll;
    int maxScroll;
    GetScrollRange(this.Handle, SB_VERT, out minScroll, out maxScroll);
    Point rtfPoint = Point.Empty;
    SendMessage(this.Handle, EM_GETSCROLLPOS, 0, ref rtfPoint);

    return (rtfPoint.Y + this.ClientSize.Height >= maxScroll);
  }

  protected virtual void OnScrolledToBottom(EventArgs e) {
    if (ScrolledToBottom != null)
      ScrolledToBottom(this, e);
  }

  protected override void OnKeyUp(KeyEventArgs e) {
    if (IsAtMaxScroll())
      OnScrolledToBottom(EventArgs.Empty);

    base.OnKeyUp(e);
  }

  protected override void WndProc(ref Message m) {
    if (m.Msg == WM_VSCROLL || m.Msg == WM_MOUSEWHEEL) {
      if (IsAtMaxScroll())
        OnScrolledToBottom(EventArgs.Empty);
    }

    base.WndProc(ref m);
  }

}

这就是它的使用方式:

public Form1() {
  InitializeComponent();
  rtfScrolledBottom1.ScrolledToBottom += rtfScrolledBottom1_ScrolledToBottom;
}

private void rtfScrolledBottom1_ScrolledToBottom(object sender, EventArgs e) {
  acceptButton.Enabled = true;
}

根据需要进行调整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从富文本框控件获取当前滚动位置? 的相关文章

  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • WinForms - 加载表单时如何使用 PaintEventArgs 运行函数?

    我试图理解图形 在 Graphics FromImage 文档中 它有这样的示例 private void FromImageImage PaintEventArgs e Create image Image imageFile Image
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • C++ 模板可以提供 N 个给定类的公共父类吗?

    我正在寻找一个 C 模板 它可以找到一组给定类的共同父级 例如 class Animal class Mammal public Animal class Fish public Animal class Cat public Mammal
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 初始化列表在 VC10 中不起作用

    我在 VC 2010 中编写了这个程序 class class1 public class1 initializer list
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector
  • Emacs C++,打开相应的头文件

    我是 emacs 新手 我想知道 是否有在头文件 源文件和相应的源文件 头文件之间切换的快捷方式 是否有像通用 emacs 参考卡那样的参考卡 Thanks There s ff find other file 您可以使用以下方法将其绑定到

随机推荐

  • 在 UINavigationController 上推送多个视图控制器时出现内存问题

    我正在为 iPad 制作一本互动书 并且正在使用UINavigationController实现页面与下一页之间的导航 当用户翻页时 下一页被推送到导航堆栈的顶部 我现在已经进入应用程序的 15 页 当我尝试从第 14 页转到第 15 页时
  • 如何重命名 Oracle 过程

    有没有一种方法可以重命名 Oracle 过程 而不必删除并重新创建该过程 不幸的是 没有等效的ALTER TABLE RENAMETO 用于 PL SQL 对象 所以恐怕您将不得不放弃该过程并使用新名称重新创建它 除非使用 SYNONYM
  • RxJava + 改造,获取列表并为每个项目添加额外信息

    我正在玩 RXJava 在 Android 中进行改造 我正在努力完成以下任务 我需要定期轮询一个给我 Observable gt 的调用 从这里我可以做到 一旦我得到这个列表 我想在每个交付中迭代并调用另一个方法来给我预计到达时间 所以只
  • 将“this”传递给 onclick 事件[重复]

    这个问题在这里已经有答案了 可能的重复 当前元素作为其事件函数参数 https stackoverflow com questions 4268085 the current element as its event function pa
  • 数组和结构体可以以不同的方式初始化吗?

    我的问题可能看起来很奇怪 事实上 这是上下文 我目前在切换时遇到一个奇怪的问题 关于我正在从事的项目 核心从pullinino到CV32 也发生了一些其他变化 例如关于crt0 如一些数据内存重置 这是一个 真实的 例子 说明了一个非常简单
  • asp.net 从内容页面更改母版页部分 css

    我的母版页中有以下代码 div div
  • 在 PHP 中为用户创建 CSV 文件

    我在 MySQL 数据库中有数据 我向用户发送一个 URL 以将他们的数据以 CSV 文件形式输出 我已经通过电子邮件发送了链接 MySQL 查询等 当他们点击链接时 我怎样才能弹出一个窗口来下载带有 MySQL 记录的 CVS 我已经掌握
  • 我可以在异步函数的 try/catch 块中使用多个“await”吗?

    i e async asyncfunction try await method1 await method2 catch error console log error 给定 method1 和 method2 是异步函数 每个await
  • 内核源码位置在Buildroot中

    我是 Buildroot 的新人 我有 P2041RDB NXP 板的 Linux 内核源代码 那么我应该将其放置在哪里以及如何在配置中设置此位置 目前无法从 Buildroot 配置中设置内核源代码的路径 您有两种选择 创建文件local
  • 将 ☺ 编码为 IBM-437 失败,而将 é 等其他有效字符编码成功

    gt gt gt bytes ibm437 Traceback most recent call last File
  • Android ExpandableListView 复选框选择仅单击的复选框

    我有一个简单的问题ExpandableListViews并使用CheckBoxes 我将在下面显示当前的代码 我目前有一个ExpandableListView每个子行中都有一个复选框 These checkboxes可以选择等等 但问题是我
  • 检查我的应用程序是否启用了使用访问权限

    我正在使用新的UsageStatsManager API to 获取当前前台应用程序 https stackoverflow com a 26885469 444324在 Android 5 0 棒棒糖中 为了使用此 API 用户必须在Se
  • 如何将多个转换声明应用于一个元素?

    我有一个具有两个类的元素 一个称为 rotate 会将元素旋转 360 度 另一个称为 doublesize 会将元素缩放为其正常大小的 2 倍 rotate transform rotate 0deg rotate hover trans
  • 如何将模型的整数属性映射到字符串?

    我的数据库中有一个 Hotels 表 其中一列是 status integer 我正在寻找将这些整数转换为字符串 所以1 Awaiting Contract 2 Designing 等等 我在 Stack 中搜索了一些答案 但缺乏答案让我觉
  • Nodejs shell 脚本在 Linux 中工作正常,但在 Windows 中不行。为什么它不会执行多个命令

    我发现我的 node js shell 脚本在 Windows 和 Linux 中的工作方式有所不同 我有一串使用 child process 库同步执行的命令 var cmd echo hello echo Stack echo Over
  • 在unity 3d上绘制3D多边形

    我正在为我正在进行的一个项目尝试统一 我正在尝试从我拥有的一组坐标中绘制 3D 多边形 所以我现在要做的是在两点之间构建一排立方体 我计划将这些点构建成实体形状或只是 墙壁 以形成一个房间 然而 它似乎没有按预期工作 请指教 drawCub
  • 如何让用户选择适用于 Safari 浏览器

    我有这个 html 结构 ol class linenums li class L0 code span span code li ol 代码之前有行号 通过选择代码 我使用此 css 以便仅选择代码而不选择行号 ol linenums l
  • git服务器复制

    我们正在使用 git 进行多站点项目 并且仓库和团队都大幅增长 因此 远程站点正在遭受痛苦 我想向远程站点添加新的 git 服务器 以减少 git 服务器上的负载并使下载速度更快 但是我不确定如何保持这些同步 有什么办法可以原子地复制 gi
  • 键盘位置遮挡了 EditText 下方的视图,希望保持可见

    我的活动基本上是一个长形式的输入字段 在每一行上 我想在每个 EditText 下方显示一个 TextView 作为提示文本 并且我希望 TextView 在用户输入数据时始终保持可见 不幸的是 软键盘掩盖了提示文本 并且总是将其自身定位在
  • 从富文本框控件获取当前滚动位置?

    我在互联网上进行了广泛的搜索 看到了很多这样的问题 但我还没有看到真正的答案 我有一个富文本框控件 其中有很多文本 该控件中有一些法律信息 默认情况下 接受 按钮被禁用 我想检测滚动事件是否垂直滚动条的位置位于底部 如果它位于底部 请启用该