每次项目运行时,带有主菜单的窗体都会缩小

2024-04-19

每当我构建以下程序时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,其中之一有几个子MenuItems。它还包含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;
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每次项目运行时,带有主菜单的窗体都会缩小 的相关文章

  • 无法使用c#更改视频捕获分辨率

    我正在尝试使用 C 中的 DirectShowNet 更改默认网络摄像头分辨率 据我所知 我需要通过调用 windows win32 api dll 中内置的 VideoInfoHeader 类来更改它以进行 avi 捕获 我有来自 Dir
  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • 如何使用 Entity Framework 和 Identity 解决对象处置异常 ASP.NET Core

    我正在尝试编写一个控制器 该控制器接收来自 AJAX 调用的请求并通过 DBContext 对数据库执行一些调用 但是 当我发出命令时var user await GetCurrentUserAsynch 在对 DBContext 的任何调
  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • 信号与信号2

    我的应用程序可能会受益于使用 boost 的信号库之一而不是本土解决方案 该应用程序是多线程的 但执行信号处理的部分是单线程的 如果多线程不是问题 是否有任何理由更喜欢 Boost Signals2 而不是 Boost Signal Boo
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • linq where 子句和 count 导致 null 异常

    除非 p School SchoolName 结果为 null 否则下面的代码将起作用 在这种情况下 它会导致 NullReferenceException if ExistingUsers Where p gt p StudentID i
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 使用 dateTimePicker 在 DataGridView 中编辑日期

    我有一个DateTime我的 WinForms 中的专栏DataGridView 目前只能通过手动输入日期来编辑该字段 例如 2010 09 02 需要什么才能拥有一个DateTimePicker 或同等 用作编辑器 DataGridVie
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 展开 std::reference_wrapper 的成本

    Given include
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用

随机推荐

  • Symfony 4 通过用户名更改密码 - 电子邮件不能为空

    介绍 我一直在尝试找出如何创建由用户名值控制的重置密码表单 错误 Path Message Invalid value Violation data email This value should not be blank null Con
  • 如何用jquery一一显示和隐藏每个div

    我想创建一个快讯标题 但我不知道问题出在哪里 因为我是网页设计的初学者 D so 我想创建标题的一部分 显示 淡入 一个标题并延迟隐藏 淡出 然后显示下一个标题 不停地循环 请帮助我学习如何创建 D 这些是我写的代码 div div cla
  • 在 angular.js 上使用 HTML5 PushState

    我正在尝试实现 html5 的 Pushstate 而不是 Angularjs 使用的 导航 我尝试过在谷歌上搜索答案 也尝试过 Angular irc 聊天室 但还没有成功 这是我的controllers js function Phon
  • 创建批处理文件以更改 Windows 7 中的电源选项

    有没有办法创建批处理文件并将其放在桌面上以更改 Windows 7 中的电源选项 具体来说 我将计算机设置为 30 分钟后休眠 现在我使用 Serve To Me Stream To Me 应用程序 我希望能够快速更改电源设置以允许连续操作
  • android在picasso加载后获取Drawable图像

    我正在使用 Picasso 库从 url 加载图像 我使用的代码如下 Picasso with getContext load url placeholder R drawable placeholder error R drawable
  • 如何将子集合添加到 Firebase Cloud Firestore 中的文档

    该文档没有任何有关如何将子集合添加到文档的示例 我知道如何将文档添加到集合以及如何将数据添加到文档 但是如何将集合 子集合 添加到文档 难道不应该有这样的方法 dbRef document example addCollection sub
  • 创建 UI 设计师

    我想使用 Silverlight WPF 或 WinForms 为自定义系统创建一个 UI 设计器 解决这个问题的最佳方法是什么 我应该注意哪些命名空间 SDK 等 我建议你看看sharpdevelophttp www icsharpcod
  • setTimeout 会使用 Heroku 免费的 dyno 小时吗?

    我有一个机器人 它的命令允许用户输入一条用破折号分隔的消息 然后输入指定的时间 然后将其传递给机器人 机器人在指定的时间过去后用该消息提醒用户 function reminder msg const message msg content
  • 如何使用位码选项制作胖框架?

    环境 XCode 7 0 1 模块 Objective C 捆绑类型 框架 你好 我正在尝试创建一个支持armv7 armv7s arm64 i386和x86 64的框架 我正在使用聚合来制作脂肪库 在聚合脚本中 我正在运行两个 xcode
  • VS Code - 错误:EPERM:不允许操作

    在 Windows 10 中使用 VS code 时 我遇到了很多权限问题 When trying to move a folder 错误 EPERM 不允许操作 重命名 路径 a gt 路径 b When deleting a folde
  • 等待 Firestore 查询完成

    我目前正在尝试在 firestore 中运行多个查询 并希望等待它们全部完成后再执行下一个代码 我已经阅读了几种可能的途径 但还没有找到一个好的 Android 示例 public HashMap
  • 单击项目菜单时如何关闭抽屉菜单?

    这是点击事件 view setOnTouchListener new View OnTouchListener Override public boolean onTouch View v MotionEvent event v setBa
  • 为什么使用分号? [复制]

    这个问题在这里已经有答案了 除了主观视觉感知和同一行有多个语句的情况之外 是否有任何理由在 JavaScript 中的语句末尾使用分号 看起来有大量证据表明分号的使用是高度可选的 并且只有少数特定情况需要使用分号 因为当 JavaScrip
  • FQL Multiquery 编写联接查询

    简单的说 我需要帮助构建 FQL 多查询请求 该请求将执行以下操作 然后从登录用户的好友列表中获取 UID 使用这些 ID 获取过去两周的所有评论和消息 来自流 最后 将这些结果与用户名连接起来 这是我迄今为止的疑问 1 GRAB UID
  • with(nolock) 或 (nolock) - 有区别吗?

    一切都基于 with nolock 完全适合这种情况的假设 已经有很多问题在争论是否使用 with nolock 我环顾四周 无法找到使用之间是否存在实际差异with nolock select customer zipcode from
  • 如何使用 jQuery 验证插件验证正则表达式?

    如何使用 jQuery 验证插件验证正则表达式 在此代码中 我们可以使用一个 jQuery 插件 jQuery Validation 插件来验证表单 但我不知道如何使用此插件来验证正则表达式
  • 排序在非字母(即亚洲)语言中意味着什么?

    我有一些代码可以按对象属性对表列进行排序 我想到 在日语或中文 非字母语言 中 发送到排序函数的字符串将以字母语言的方式进行比较 以日本姓氏列表为例 寿拘 Suzuki 松坂 Matsuzaka 松井 Matsui 山田 Yamada 藤本
  • 窗口中的图标属性导致 Windows XP SP2 中的应用程序崩溃

    假设我有这个
  • 如何将 JFileChooser 限制为自定义文件类型? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我遇到了一些小问题JFileChooser 我想限制只读取某些类型的文件 另一个堆栈答案建议使用File
  • 每次项目运行时,带有主菜单的窗体都会缩小

    每当我构建以下程序时Form1的大小缩小了20 有些情况我需要对表格做一些改变 比如移动someLaggyControl1几个像素 但并非总是如此 这很奇怪 该表格使用了MainMenu https msdn microsoft com e