如何将滚动条添加到自定义窗体?

时间:2017-07-25 05:21:56

标签: c# forms winforms

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

为此,我从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。

1 个答案:

答案 0 :(得分:0)

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