gpt4 book ai didi

c# - 每次运行项目时,带有 MainMenu 的表单都会缩小

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:18 25 4
gpt4 key购买 nike

每当我构建以下程序时,Form1 的大小都会缩小 20。(在某些情况下,我需要对表单进行更改,例如将 someLaggyControl1 移动到几个像素,但并非总是如此。这很奇怪。)表单使用 MainMenu对于菜单,不是 MenuStrip .是的,MainMenu 较旧,不推荐使用,但出于多种原因我需要使用它,其中之一是 radio-button items .更改为 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 s,其中一个有几个子 MenuItem。它还包含 SomeLaggyControl,(当然)用作示例。 SomeLaggyControl 需要 1 秒来呈现并用于模拟一堆控件,这样示例就不会变得困惑。

每当我运行该程序时,Form1 的大小都会缩小。我可能需要更改表单以使其缩小(例如移动 someLaggyControl1 左右),或者我可能不需要;我相信这必须处理设计人员生成新代码的问题。无论如何,这会导致形状缩小。

这里有一些图片展示了这一点:

The original appearance of the form, before building, with a size of 300 by 300.
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 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 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 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 300 by 47 form.The form is unable to shrink anymore (though it tries).
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)?我也对为什么会发生这种情况感兴趣,但这不是太重要。

最佳答案

当使用设计器附加到其 Menu 属性时,旧菜单系统中有一些内置的东西会根据菜单系统的高度增加窗体的大小。

要解决这个问题,请进入 Designer.cs 文件,注释掉这一行:

// this.Menu = this.MainMenu1;

然后,在 OnLoad 覆盖中,重新附加它:

protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
this.Menu = MainMenu1;
}

菜单在设计器中不可见,除非您从表单区域下方的组件托盘中选择它。您会注意到菜单在表单上变得可见,并且当菜单可见时表单的大小将暂时增加。这似乎可以防止您的表单始终自行调整大小。

关于c# - 每次运行项目时,带有 MainMenu 的表单都会缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28461091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com