【问题标题】:How to add scroll bar to the custom form?如何在自定义表单中添加滚动条?
【发布时间】:2017-07-25 05:21:56
【问题描述】:

我正在开发一个自定义表单,它提供了更多选项来自定义表单的外观。

为此,我从 System.Windows.Forms.Form 类派生了该类,并重写了 WndProc(ref Message m) 方法。

我已经处理了所需的窗口消息(WM_NCPAINT、WM_NCCALCSIZE 等)来自定义表单。

我已将 AutoScroll 属性设置为 true。

当放置在窗体中的控件的大小大于窗体的大小时,Microsoft 窗体会自动显示滚动条。

但在这种情况下,我的自定义表单不会显示任何滚动条。

我已经处理了窗口消息 WM_NCCALCSIZE 来指定我的表单的客户区大小,如下所示。

 void On_WM_NcCalcSize(ref Message m)
 {
    rect.Top += borderThickness + titleBarHeight;
    rect.Left += borderThickness;
    rect.Right -= borderThickness;
    rect.Bottom -= borderThickness;
    m.Result = IntPtr.Zero;
    Marshal.StructureToPtr(rect, m.LParam, true);
 }

请确认是否是这个原因?

我还有一个疑问。

不知道自己加滚动条会不会影响Controls.Count的值。

如果是,那么我应该怎么做才能在表单上显示滚动条而不自己添加呢?

我是否必须在表单的非客户区绘制滚动条?

请为此提供您宝贵的解决方案。

提前致谢。

问候, Mohanram Anbukkarasu。

【问题讨论】:

  • 因为您已经制作了一个自定义表单,您必须创建自己的函数到show scrollbar,以及its appearance 并处理它的scroll events
  • 使用 ILSPY 或 Reflector 并查看您缺少的实现 - 也许它是一个密封类。我很惊讶从System.Windows.Forms.Form 派生不会自动执行此操作。一些重现问题的代码和截图会很棒,请edit
  • 我已编辑问题以提供更多详细信息。请立即检查。

标签: c# forms winforms


【解决方案1】:

通常,如果您从System.Windows.Forms.Form 派生,滚动条将自动出现。因此,也许您在覆盖的 WndProc 方法中搞砸了。另请注意,子控件的属性DockAnchor 会影响AutoScroll 的行为。您还可以考虑在您添加控件的表单中添加一个额外的Panel。然后您可以控制此面板的滚动。

【讨论】:

    猜你喜欢
    • 2020-09-19
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多