如何防止用户在特定位置添加控件?

时间:2014-03-10 09:34:16

标签: c# user-controls

之前我发布了一个关于How to create non-client area?的问题,我得到了答案。现在,我想阻止用户在特定客户区添加控件。因此,用户只能在客户区的已分配部分添加控件。

控件应该看起来像这样。 enter image description here

CLASS DESIGN& CODES

XWizardControl:是将放置在表单上的主要用户控件。

XWizardPageWindow:是包含所有XWizardPages的容器。此控件将放在XWizardControl上。用户将从Control Collection对话窗口添加页面。

XWizardPageCollection:XWizardPage

的集合

XWizardPage:用户将在此处放置其他控件。

XWizardPageDesigner: XWizardPage控件的控件设计师

enter image description here

1 个答案:

答案 0 :(得分:0)

您正在错误地设置非客户矩形

  

“在输入时,结构包含窗口的建议窗口矩形。退出时,结构应包含相应窗口客户区域的屏幕坐标。” - MSDN -

另请注意,RECT结构是ltrb矩形,而不是xywh矩形。

<强>不正确

您不应将值明确设置为:

ncRect.top = 68; //<----
ncRect.left = 176; //<----
ncRect.bottom -= 68;

ncParams.rectProposed.top = 68; //<----
ncParams.rectProposed.left = 176; //<----
ncParams.rectProposed.bottom -= 68;

<强>正确

而是在矩形中添加(+=)或减去(-=):

ncRect.top += 30; //<---- 30px top-margin
ncRect.left += 50; //<---- 50px left-margin
ncRect.bottom -= 20; //<---- 20px bottom-margin

ncParams.rectProposed.top += 30;
ncParams.rectProposed.left += 50;
ncParams.rectProposed.bottom -= 20;

注意

如果您没有正确绘制非客户区域,并且控件放在位置-5, -5,那么控件可能看起来好像是里面非客户区域。