【发布时间】:2014-07-20 21:38:18
【问题描述】:
我有一个没有标题栏的窗体。我想用鼠标拖动它。在网上搜索后,我找到了移动表单的代码:
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x84:
base.WndProc(ref m);
if ((int)m.Result == 0x1)
m.Result = (IntPtr)0x2;
return;
}
base.WndProc(ref m);
}
但它有一个问题:它只在不受任何控件覆盖的表单区域上运行。例如,如果我使用标签或组框,我无法通过单击它们来移动表单。
我该如何解决这个问题?
【问题讨论】:
-
您确定要在用户单击控件时让单击并拖动表单工作吗?单击然后变得模棱两可,用户是否尝试对控件执行某些操作?可能最好接受你现在的工作方式。
-
不适用于所有控件。我只想将它用于看起来像表单背景的控件,如标签、组框、面板、矩形形状,...
-
表单有边框是有原因的。只需使用标准边框。用户不会期望能够单击并拖动控件来移动表单。
-
@Hamid:我不同意 - 标签看起来不像 chrome(背景)。组框也没有。面板和矩形可能会也可能不会,但在顶部留下足够的背景就足够了!对于某些特殊情况,您可能需要添加上述代码,但用户不希望在单击并拖动标签时移动窗口。
-
我同意你的看法。我在表单顶部留下了足够的背景空间以及该区域的标题标签。我希望用户在单击标签(标题栏)时可以移动表单。