`
izuoyan
  • 浏览: 9259825 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Winforms:Form的最小宽度限制

阅读更多

一、问题描述

我们给Form设置一个比较小的宽度,但Form的实际宽度可能会大于我们设置的值。

二、问题重现

1. Win7中,把主题设为一种Aero主题;

2. Visual Studio中,创建一个Winforms工程;

3. Form1中,添加一个按钮;

4. 双击button1,并为button1添加如下Click事件处理器;

private void button1_Click(object sender, EventArgs e)

{

Form newForm = new Form();

newForm.Width = 100;

MessageBox.Show(newForm.Width.ToString(), "newForm.Width");

}

5. 编译运行程序,点击button1

我们发现消息框中显示的宽度并不是我们试图设置的100,而是132

三、问题分析

Winforms在设置Form宽度的Form.set_Width中,我们会把试图设置的大小和SystemInformation.MinWindowTrackSize进行比较Winforms不允许Form的大小比MinWindowTrackSize小。也就是说MinWindowTrackSize规定了Form最小的大小。如果我们设置的值比MinWindowTrackSize要小,Winforms会把Form的大小设置为MinWindowTrackSize

SystemInformation.MinWindowTrackSize的大小随着Windows的系统设置的改变而改变。在Win7中,如果其主题为Aero,那么MinWindowTrackSize的宽度为132。如果把Win7的主题设为Classic,那么MinWindowTrackSize的宽度为112

所以在前面的代码中,由于我们试图设置的值100小于MinWindowTrackSize的宽度132,所以最终Form的宽度为132

另外,Winforms还提供了一个属性Form.MinimumSize来定义Form最小的大小。如果Form.MinimumSizeMinWindowTrackSize还要小,则Form.MinimumSize不起作用。如果Form.MinimumSize大于MinWindowTrackSize,则Form.MinimumSize成为Form最终的最小大小。

我们可以用如下一段代码来总结Winforms中对Form的最小宽度的限制:

private void button1_Click(object sender, EventArgs e)

{

int width = SystemInformation.MinWindowTrackSize.Width;

//On Win7, it shows 132

MessageBox.Show(width.ToString(), "MinWindowTrackSize.Width");

Form newForm = new Form();

newForm.Width = 100;

//On Win7, it shows 132

MessageBox.Show(newForm.Width.ToString(), "newForm.Width");

newForm.MinimumSize = new Size(80, 300);

//On Win7, it shows 132

MessageBox.Show(newForm.Width.ToString(), "newForm.Width");

newForm.MinimumSize = new Size(150, 300);

//On Win7, it shows 150

MessageBox.Show(newForm.Width.ToString(), "newForm.Width");

}

分享到:
评论

相关推荐

    C#结合wpf实现3D图形绘制和导出实例

    3.WPF控件嵌入WinForms: 使用ElementHost控件将WPF控件嵌入到WinForms窗口中。 4.3D图形绘制: 在WPF中,利用Viewport3D控件来绘制3D图形,例如立方体。 5.导入STL: 使用Helix Toolkit的StLReader类从STL文件中读取3D...

    Verify.WinForms:扩展验证以允许验证WinForms UI

    验证.WinForms 扩展以允许验证WinForms UI。 可通过获得支持。 内容 NuGet包 用法 在程序集加载时一次启用VerifyXaml: VerifyWinForms . Enable (); | 形成 可视元素(窗体/控件等)可以按以下方式进行验证: ...

    webview-winforms:带有 CEFSharp 和 Razor 引擎的 Winforms 中的 Webview

    webview-winforms 由和提供支持的 Winforms 中的 Webview

    VS13.WinForms:使用Visual Studio 2013进行WinForms开发的组件和设计机制

    VS13.WinForms概述使用Visual Studio 2013进行WinForms开发的开发组件和设计机制。 项目VS13.Reminders.Lib,VS13.Reminders.Win为WinForms应用程序提供Outlook样式的项目提醒。 通知区域中的VS13.TrayIcon.Lib,...

    Unity-WinForms:Unity3d的Windows窗体端口

    Unity Windows表单 在“ UnityEngine.GUI”类的顶部构建的Unity3d的Windows窗体端口(包括System.Drawing)。 支持的控件 按钮; 复选框; 组合框; DateTimePicker; FontDialog; 形成; GroupBox;...

    Project-WinForms:求解定积分的程序

    梯形法基于将积分区间划分为一系列相等的子区间,并在每个子区间上构建一个梯形,梯形的底边长度等于子区间的宽度,高则为该区间内函数的最大值和最小值之间的平均值。通过将所有梯形的面积相加,我们可以得到积分的...

    winforms:Windows窗体是用于构建Windows桌面应用程序的.NET Core UI框架。

    Windows窗体(WinForms)是用于构建Windows桌面应用程序的UI框架。 它是Windows用户界面库(例如User32和GDI +)上的.NET包装。 它还提供Windows窗体特有的控件和其他功能。 Windows窗体还提供了基于Visual Studio...

    Register-WinForms:通过使用.NET Framework上的Windows Forms进行简单的图书注册系统

    【标题】:“Register-WinForms”项目是一个基于.NET Framework的Windows Forms应用,旨在实现一个简易的图书注册系统。这个系统利用C#编程语言的强大功能,为用户提供了在桌面环境中管理和记录图书信息的平台。 ...

    formdesigner

    1. **可视化设计**:formdesigner提供了一个所见即所得(WYSIWYG)的环境,开发者可以直接在设计视图中看到窗体的实际布局。这大大简化了UI设计的过程,因为开发者无需编写大量的代码来定位和设置控件。 2. **控件...

    GroupDocs.Viewer-for-.NET-WinForms:.NET App WinForms UI现代示例的文档查看器

    .NET Windows窗体示例的GroupDocs.Viewer 版本1.0.0 系统要求 .NET Framework 4.6.1 Visual Studio 2019 ... API的允许您查看90多种文档格式,包括DOCX , PDF , PPT , XLS等,而无需任何其他依赖项。...

    在WinForms程序里实现窗体传值的三种方法

    在Windows Forms(WinForms)应用程序开发中,常常需要在不同的窗体之间传递数据。这可能是为了更新用户界面,处理业务逻辑,或者在多个步骤的用户交互中维持状态。以下是实现WinForms窗体间传值的三种常用方法: 1...

    microsoft-account-winforms:用于 Windows 窗体的简单 Microsoft 帐户登录项目

    Microsoft 帐户 Windows 窗体该库提供了一种从 Windows 窗体应用程序生成 Microsoft 帐户访问和刷新令牌的简单方法。... 您的应用程序需要在 API 设置页面上配置为移动或桌面客户端应用程序,此库才能工作。...

    consulta-cnpj-winforms:Projeto副顾问CNPJ实用程序Windows窗体+ API ReceitaWS

    CNPJ咨询-API ReceitaWS :office_building: Projeto副顾问CNPJ实用程序Windows窗体+ API ReceitaWS + SQL Server 基础做项目: : API的实用程序 ...观察API: 否,不存在3个请求,并保留所有权利;...

    WinForms

    在Windows Forms(WinForms)开发中,Timer控件、ListView控件和TreeView控件是非常重要的组件,它们在创建用户界面和实现特定功能时起到关键作用。以下是对这些控件的详细说明: 1. **Timer控件** Timer控件是...

    使用C# WINFORMS做时钟

    在本文中,我们将深入探讨如何使用C# WinForms来创建一个自定义的桌面时钟。C#(发音为 "C sharp")是Microsoft开发的一种面向对象的编程语言,广泛用于Windows应用程序开发,而WinForms是.NET框架的一部分,提供了...

    WinFormsUI:C# 停靠窗口库

    【WinFormsUI:C# 停靠窗口库】 WinFormsUI 是一个专为 C# 开发者设计的库,主要用于创建具有停靠功能的用户界面(UI)。停靠窗口技术允许用户自由地组织和调整控件在窗口中的布局,使得应用程序的界面可以更加灵活...

    WeifenLuo.WinFormsUI.Docking 控件 应用 C# winform

    WeifenLuo.WinFormsUI.Docking 控件应用 C# WeifenLuo.WinFormsUI.Docking 控件是一个强大的界面布局控件,可以保存自定义的布局为 XML 文件,并可以加载 XML 配置文件。下面是关于 WeifenLuo.WinFormsUI.Docking ...

    WinForms总复习.zip

    - **窗体**: 窗体(Form)是WinForms应用的核心,它代表应用程序的可视窗口。 - **事件驱动编程**: WinForms基于事件驱动模型,当用户与控件交互时(如点击按钮),会触发相应的事件,开发者可以通过编写事件处理...

    C1WinForms.4_官方案例

    ComponentOne Studio for WinForms is a comprehensive suite of controls and components for developing .NET WinForms solutions. It includes the following ComponentOne WinForms products: - BarCode for...

    winfrom两个窗体之间传值

    1. WinForms:Windows Forms是.NET Framework的一部分,用于构建桌面应用程序。它提供了丰富的控件和事件处理机制,方便开发者创建用户界面。 2. 窗体(Form):WinForms中的每个可视组件都是一个窗体,窗体可以...

Global site tag (gtag.js) - Google Analytics