C# 如何保持固定形式的边界?

C# 如何保持固定形式的边界?,c#,winforms,user-interface,window,border,C#,Winforms,User Interface,Window,Border,我希望我的Windows窗体窗体保留窗口边框,同时没有标题栏且不可调整大小(固定)(类似于将鼠标悬停在任务栏上的按钮上时的窗口预览): 将ControlBox设置为false并将Text设置为”将删除标题栏并保留所需的边框,但边框仅在窗体较大时才可见。当我将FormBorderStyle设置为Fixed*样式之一时,边框消失: 如何实现所描述的行为?我刚刚玩弄了我的一个项目,通过设计视图将FormBorderStyle设置为FixedSingle,窗口似乎保留了Windows 8的边框。我最

我希望我的Windows窗体窗体保留窗口边框,同时没有标题栏且不可调整大小(固定)(类似于将鼠标悬停在任务栏上的按钮上时的窗口预览):

ControlBox
设置为
false
并将
Text
设置为
将删除标题栏并保留所需的边框,但边框仅在窗体较大时才可见。当我将
FormBorderStyle
设置为
Fixed*
样式之一时,边框消失:


如何实现所描述的行为?

我刚刚玩弄了我的一个项目,通过设计视图将
FormBorderStyle
设置为
FixedSingle
,窗口似乎保留了Windows 8的边框。我最初在标题中有文本,这迫使边界渲染。我删除了文本,不再渲染边框,因此作为一个黑客解决方案,我只需输入一个空字符串,只需点击backspace几次。这使得边框显示出来并保持固定。

我刚刚玩了我的一个项目,通过设计视图将
FormBorderStyle
设置为
FixedSingle
,窗口似乎保留了Windows 8的边框。我最初在标题中有文本,这迫使边界渲染。我删除了文本,不再渲染边框,因此作为一个黑客解决方案,我只需输入一个空字符串,只需点击backspace几次。这使边框显示并保持固定。

您可以pinvoke和调整:

之后,您必须手动操作。

您可以pinvoke和调整:


之后,您将不得不手动执行。

对于我的“请稍候”对话框,我只是在窗体周围放置了一个面板(在控件后面),并使用面板边框“Fixed”不是FormBorderStyle属性的有效设置。更好地记录你的问题。至少包括一个运行窗口的屏幕截图、Windows版本和一个他们希望它看起来像的方式的截图。@HansPassant回答我问题的人似乎完全理解我在问什么。不过,我包括了屏幕截图。对于我的“请稍候”对话框,我只是在窗体周围放置了一个面板(在控件后面),并使用面板边框“Fixed”不是FormBorderStyle属性的有效设置。更好地记录你的问题。至少包括一个运行窗口的屏幕截图、Windows版本和一个他们希望它看起来像的方式的截图。@HansPassant回答我问题的人似乎完全理解我在问什么。但是我包括了截图。现在他有两个问题,这些声明对于64位代码是错误的。重写CreateParams属性是正确的方法。现在他有两个问题,这些声明对于64位代码是错误的。重写CreateParams属性是正确的方法。
// run in LINQpad
private const int GWL_STYLE = -16;
private const int WS_SIZEBOX = 0x040000;
[DllImport("user32.dll", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
void Main()
{
    var form = new Form();
    form.ControlBox = false;
    form.FormBorderStyle = FormBorderStyle.FixedDialog;
    form.Show();
    SetWindowLong(form.Handle, GWL_STYLE, GetWindowLong(form.Handle, GWL_STYLE) | WS_SIZEBOX);
}