我正在开发一个自定义表单,它提供了更多选项来自定义表单的外观。
为此,我从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。
答案 0 :(得分:0)
通常,如果您从System.Windows.Forms.Form
派生,则会自动显示滚动条。所以也许你在重写WndProc
方法中搞砸了一些东西。另请注意,子控件的属性Dock
和Anchor
将影响AutoScroll
的行为。您还可以考虑在添加控件的表单中添加额外的Panel
。然后,您可以控制此面板的滚动。