每当我构建以下程序时Form1
的大小缩小了20。(有些情况我需要对表格做一些改变,比如移动someLaggyControl1
几个像素,但并非总是如此。这很奇怪。)该表格使用了MainMenu https://msdn.microsoft.com/en-us/library/system.windows.forms.mainmenu(v=vs.110).aspx对于菜单,不是MenuStrip https://msdn.microsoft.com/en-us/library/system.windows.forms.menustrip(v=vs.110).aspx. Yes, MainMenu
较旧,不建议使用,但我需要使用它有几个原因,其中之一是单选按钮项目 https://msdn.microsoft.com/en-us/library/vstudio/system.windows.forms.menuitem.radiocheck(v=vs.100).aspx。更改为MenuStrip
对我来说不是一个有效的解决方案。
这是重现此问题所需的代码:
Form1.designer.cs
namespace MainMenuMCVE
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if (disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.MainMenu1 = new System.Windows.Forms.MainMenu(this.components);
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.menuItem7 = new System.Windows.Forms.MenuItem();
this.menuItem8 = new System.Windows.Forms.MenuItem();
this.menuItem3 = new System.Windows.Forms.MenuItem();
this.menuItem4 = new System.Windows.Forms.MenuItem();
this.menuItem5 = new System.Windows.Forms.MenuItem();
this.menuItem6 = new System.Windows.Forms.MenuItem();
this.someLaggyControl1 = new MainMenuMCVE.SomeLaggyControl();
this.SuspendLayout();
//
// MainMenu1
//
this.MainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1,
this.menuItem5});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem2,
this.menuItem3,
this.menuItem4});
this.menuItem1.Text = "Example";
//
// menuItem2
//
this.menuItem2.Index = 0;
this.menuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem7,
this.menuItem8});
this.menuItem2.Text = "Something";
//
// menuItem7
//
this.menuItem7.Index = 0;
this.menuItem7.Text = "Another thing";
//
// menuItem8
//
this.menuItem8.Index = 1;
this.menuItem8.Text = "Ect";
//
// menuItem3
//
this.menuItem3.Index = 1;
this.menuItem3.Text = "Something else";
//
// menuItem4
//
this.menuItem4.Index = 2;
this.menuItem4.Text = "A third thing";
//
// menuItem5
//
this.menuItem5.Index = 1;
this.menuItem5.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem6});
this.menuItem5.Text = "Example 2";
//
// menuItem6
//
this.menuItem6.Index = 0;
this.menuItem6.Text = "Blah";
//
// someLaggyControl1
//
this.someLaggyControl1.Laggyness = 1000;
this.someLaggyControl1.Location = new System.Drawing.Point(12, 81);
this.someLaggyControl1.Name = "someLaggyControl1";
this.someLaggyControl1.Size = new System.Drawing.Size(268, 23);
this.someLaggyControl1.TabIndex = 0;
this.someLaggyControl1.Text = "someLaggyControl1";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 253);
this.Controls.Add(this.someLaggyControl1);
this.Menu = this.MainMenu1;
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.MainMenu MainMenu1;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MenuItem menuItem2;
private System.Windows.Forms.MenuItem menuItem3;
private System.Windows.Forms.MenuItem menuItem4;
private System.Windows.Forms.MenuItem menuItem5;
private System.Windows.Forms.MenuItem menuItem6;
private System.Windows.Forms.MenuItem menuItem7;
private System.Windows.Forms.MenuItem menuItem8;
private SomeLaggyControl someLaggyControl1;
}
}
SomeLaggyControl.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace MainMenuMCVE
{
class SomeLaggyControl : Control
{
public int Laggyness { get; set; }
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.DrawString("A laggy control that takes " + Laggyness + " ms to render", this.Font, Brushes.Black, 0, 0);
System.Threading.Thread.Sleep(Laggyness);
base.OnPaint(e);
}
}
}
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MainMenuMCVE
{
public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}
}
}
程序.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace MainMenuMCVE
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
其中的关键部分是一个表单,Form1
,其中包含一个MainMenu
有几个MenuItem https://msdn.microsoft.com/en-us/library/vstudio/system.windows.forms.menuitem(v=vs.100).aspxs,其中之一有几个子MenuItem
s。它还包含SomeLaggyControl
,(当然)用作示例。SomeLaggyControl
需要 1 秒来渲染,用于模拟一堆控件,以便示例不会变得混乱。
每当我运行该程序时,Form1
的尺寸缩小了。我可能需要对表格进行更改以使其缩小(例如移动someLaggyControl1
关于),或者我可能不会;我相信这必须处理设计师生成新代码的问题。无论如何,这都会导致形状缩小。
以下是一些实际操作的图片:
The original appearance of the form, before building, with a size of 300 by 300.
After the first rebuild. It's not obvious, but the size is now 300 by 280. Check the scroll bar.
After a second rebuild. The form is now 300 by 260, and it's more obvious.
After a third rebuild. Now that it's 300 by 240, the form is getting small.
After several more rebuilds, I am left with this pleasant piece of easy to use 300 by 47 form. The form is unable to shrink anymore (though it tries).
我的主要问题是:如何阻止我的表单调整大小(除了切换到MenuStrip
)?我也对为什么会发生这种情况感兴趣,但这并不是太重要。