【发布时间】: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 -
我已编辑问题以提供更多详细信息。请立即检查。