C#:如何禁用表单移动?

时间:2011-03-02 17:24:31

标签: c# .net winforms windows-ce

Locked的MSV-Studio描述是“Locked属性确定我们是否可以移动或调整控件大小”,因此我将winforms Locked属性设置为true,但表单仍然可以移动。 防止表单移动的正确方法是什么?

4 个答案:

答案 0 :(得分:6)

最大化它。谢谢,杰克。 ; - )

答案 1 :(得分:3)

我使用以下代码显示内部编写的公司安全应用程序的表单对话框窗口 - 其中一个要求是表单无法移动,调整大小或以任何其他形式存在。无论如何,请看下面的开始...

/// <seealso href="http://msdn.microsoft.com/en-us/library/ms633548(v=vs.85).aspx"/>
    /// <seealso href="http://msdn.microsoft.com/en-us/library/ms633545(v=vs.85).aspx"/>
    public class ShowMessage
    {
        const int SW_SHOWMAXIMIZED = 3; //for maximising (if desired)
        const int SW_SHOW = 5; //for simply activating the form (not needed)
        const int SW_SHOWNORMAL = 1; //displays form at original size and position (what we use here)

        const UInt32 SWP_NOSIZE = 0x0001; //cannot be resized
        const UInt32 SWP_NOMOVE = 0x0002; //cannot be moved

        static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); //always lives at the top
        const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE; //sets the flags for no resize / no move

        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
        [DllImport("user32.dll")]
        static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

        /// <summary>
        /// Displays the passed form using the parameters set in the base ShowMessage class
        /// </summary>
        /// <param name="frm">A Windows Form object</param>
        /// <example><code>ShowMessage.ShowTopmost(new myForm());</code></example>
        public static void ShowTopmost(Form frm)
        {
            ShowWindow(frm.Handle, SW_SHOWNORMAL); //shows the form
            SetWindowPos(frm.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); //sets the form position as topmost, centered

        }
    }

然后我只需致电

ShowMessage.ShowTopmost(new frmMessage());

我不是说这是唯一的方式或正确的方式,但它 的方式来做它。

答案 2 :(得分:1)

防止用户移动窗口通常是不好的形式。用户应该能够在任何他想要的地方拥有窗口。防止调整大小是一回事,阻止移动是另一回事。我不知道任何C#本地方式,但你可以挂钩到Win32以防止窗口移动。

答案 3 :(得分:0)

您可以使用表单的Move事件并将表单设置回起始位置。您必须捕获并存储(在内存中)起始位置。