一、问题描述
我们给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.MinimumSize比MinWindowTrackSize还要小,则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");
}
分享到:
相关推荐
3.WPF控件嵌入WinForms: 使用ElementHost控件将WPF控件嵌入到WinForms窗口中。 4.3D图形绘制: 在WPF中,利用Viewport3D控件来绘制3D图形,例如立方体。 5.导入STL: 使用Helix Toolkit的StLReader类从STL文件中读取3D...
验证.WinForms 扩展以允许验证WinForms UI。 可通过获得支持。 内容 NuGet包 用法 在程序集加载时一次启用VerifyXaml: VerifyWinForms . Enable (); | 形成 可视元素(窗体/控件等)可以按以下方式进行验证: ...
webview-winforms 由和提供支持的 Winforms 中的 Webview
VS13.WinForms概述使用Visual Studio 2013进行WinForms开发的开发组件和设计机制。 项目VS13.Reminders.Lib,VS13.Reminders.Win为WinForms应用程序提供Outlook样式的项目提醒。 通知区域中的VS13.TrayIcon.Lib,...
Unity Windows表单 在“ UnityEngine.GUI”类的顶部构建的Unity3d的Windows窗体端口(包括System.Drawing)。 支持的控件 按钮; 复选框; 组合框; DateTimePicker; FontDialog; 形成; GroupBox;...
梯形法基于将积分区间划分为一系列相等的子区间,并在每个子区间上构建一个梯形,梯形的底边长度等于子区间的宽度,高则为该区间内函数的最大值和最小值之间的平均值。通过将所有梯形的面积相加,我们可以得到积分的...
Windows窗体(WinForms)是用于构建Windows桌面应用程序的UI框架。 它是Windows用户界面库(例如User32和GDI +)上的.NET包装。 它还提供Windows窗体特有的控件和其他功能。 Windows窗体还提供了基于Visual Studio...
【标题】:“Register-WinForms”项目是一个基于.NET Framework的Windows Forms应用,旨在实现一个简易的图书注册系统。这个系统利用C#编程语言的强大功能,为用户提供了在桌面环境中管理和记录图书信息的平台。 ...
1. **可视化设计**:formdesigner提供了一个所见即所得(WYSIWYG)的环境,开发者可以直接在设计视图中看到窗体的实际布局。这大大简化了UI设计的过程,因为开发者无需编写大量的代码来定位和设置控件。 2. **控件...
.NET Windows窗体示例的GroupDocs.Viewer 版本1.0.0 系统要求 .NET Framework 4.6.1 Visual Studio 2019 ... API的允许您查看90多种文档格式,包括DOCX , PDF , PPT , XLS等,而无需任何其他依赖项。...
在Windows Forms(WinForms)应用程序开发中,常常需要在不同的窗体之间传递数据。这可能是为了更新用户界面,处理业务逻辑,或者在多个步骤的用户交互中维持状态。以下是实现WinForms窗体间传值的三种常用方法: 1...
Microsoft 帐户 Windows 窗体该库提供了一种从 Windows 窗体应用程序生成 Microsoft 帐户访问和刷新令牌的简单方法。... 您的应用程序需要在 API 设置页面上配置为移动或桌面客户端应用程序,此库才能工作。...
CNPJ咨询-API ReceitaWS :office_building: Projeto副顾问CNPJ实用程序Windows窗体+ API ReceitaWS + SQL Server 基础做项目: : API的实用程序 ...观察API: 否,不存在3个请求,并保留所有权利;...
在Windows Forms(WinForms)开发中,Timer控件、ListView控件和TreeView控件是非常重要的组件,它们在创建用户界面和实现特定功能时起到关键作用。以下是对这些控件的详细说明: 1. **Timer控件** Timer控件是...
在本文中,我们将深入探讨如何使用C# WinForms来创建一个自定义的桌面时钟。C#(发音为 "C sharp")是Microsoft开发的一种面向对象的编程语言,广泛用于Windows应用程序开发,而WinForms是.NET框架的一部分,提供了...
【WinFormsUI:C# 停靠窗口库】 WinFormsUI 是一个专为 C# 开发者设计的库,主要用于创建具有停靠功能的用户界面(UI)。停靠窗口技术允许用户自由地组织和调整控件在窗口中的布局,使得应用程序的界面可以更加灵活...
WeifenLuo.WinFormsUI.Docking 控件应用 C# WeifenLuo.WinFormsUI.Docking 控件是一个强大的界面布局控件,可以保存自定义的布局为 XML 文件,并可以加载 XML 配置文件。下面是关于 WeifenLuo.WinFormsUI.Docking ...
- **窗体**: 窗体(Form)是WinForms应用的核心,它代表应用程序的可视窗口。 - **事件驱动编程**: WinForms基于事件驱动模型,当用户与控件交互时(如点击按钮),会触发相应的事件,开发者可以通过编写事件处理...
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...
1. WinForms:Windows Forms是.NET Framework的一部分,用于构建桌面应用程序。它提供了丰富的控件和事件处理机制,方便开发者创建用户界面。 2. 窗体(Form):WinForms中的每个可视组件都是一个窗体,窗体可以...