默认情况下,我使用 FormBorderStyle = FixedToolWindow 创建了一个简单的测试表单,并添加了一个按钮,该按钮将在按下鼠标时在 FixedToolWindow 和 SizableToolWindow 之间切换。
在这两者之间切换 FormBorderStyle 似乎会产生一种奇怪的效果,导致我的应用程序出现很多问题。问题是窗口似乎改变了大小,我不能。我只想更改边框,我需要表单大小保持不变。
例如,这是按钮代码:
private void button1_Click(object sender, System.EventArgs e) {
if(FormBorderStyle == FormBorderStyle.FixedToolWindow) {
System.Diagnostics.Debug.WriteLine("SWITCHING: FIXED -> SIZABLE");
FormBorderStyle = FormBorderStyle.SizableToolWindow;
} else {
System.Diagnostics.Debug.WriteLine("SWITCHING: SIZABLE -> FIXED");
FormBorderStyle = FormBorderStyle.FixedToolWindow;
}
}
并调试我使用这个:
private void Settings_SizeChanged(object sender, System.EventArgs e) {
System.Diagnostics.Debug.WriteLine(this.Size);
}
这是我按下开关按钮时的输出:
SWITCHING: FIXED -> SIZABLE
{Width=373, Height=169}
{Width=383, Height=179}
SWITCHING: SIZABLE -> FIXED
{Width=383, Height=179}
{Width=373, Height=169}
我该如何解决这种行为?我所说的“修复”是指尽可能防止这种情况发生。无论边框样式的类型如何,我都希望能够指定我的表单大小并保持不变。
此外,如果有人想用这种方法解决这个问题,那么通过子类化 Form 类的解决方案对我来说是完美的解决方案。
编辑:
我制作了一个小视频来演示这个问题。第一个测试表明表单大小实际上并没有改变(视觉上),只是表单的位置发生了一点变化;但是 Size 属性的值确实发生了变化,正如您在调试输出中看到的那样。您将在调试输出中看到的第二个测试是表单 Size 属性值发生变化,并且窗口大小本身也会发生变化。