C#下改变窗体大小

  在C#下要改变窗体的大小,只需要添加一个statusstrip,然后把sizinggrip改为true,这样鼠标在窗体右下角时就会出现一个大小调整手柄,就可以调整大小。

  窗体大小可以调整了,但是控件不会跟着一起调整,需要为窗体添加一个Resize事件,然后在事件中调整控件的大小。下面就以一个名称为ListFiles的listview控件为例进行说明:

  this.ListFiles.Width = this.Width - this.ListFiles.Margin.Horizontal;
        this.ListFiles.Height = this.StatusMain.Location.Y - this.ListFiles.Location.Y - this.ListFiles.Margin.Bottom;

  ListFiles上面是工具栏,下面是状态栏,因此其起始位置不需要调整,只需要调整其大小即可。其宽度为窗体的宽度减去ListFiles自身需要占用的水平空白大小;其高度为状态栏的起始位置减去自身的起始位置再减去ListFiles底部空白的大小即可。

 

  这样控件的大小也可以调整。但是还有一个问题,有时我们不希望窗体被拖动的非常小,基本控件都显示不开,为此我们就需要设置窗体的最小大小。下面代码把窗体最小大小设为工作区的1/3。

  this.MinimumSize = new Size(SystemInformation.WorkingArea.Width/3, SystemInformation.WorkingArea.Height/3);  

 

Author:xugd, 2009.9.23

 

C#中,有多种方法可以禁止改变窗体大小,以下是具体介绍: ### 代码设置方式 #### 方式一:设置 `FormBorderStyle` 属性 在代码中设置窗体的 `FormBorderStyle` 属性为 `FormBorderStyle.FixedSingle`,并可选择禁用最大化和最小化按钮。示例代码如下: ```csharp using System; using System.Windows.Forms; namespace PreventResizeForm { public class MainForm : Form { public MainForm() { // 设置窗体标题 this.Text = "禁止改变窗体大小"; // 设置窗体大小 this.Size = new System.Drawing.Size(400, 300); // 禁止改变窗体大小 this.FormBorderStyle = FormBorderStyle.FixedSingle; // 可选:禁止最大化按钮 this.MaximizeBox = false; // 可选:禁止最小化按钮 // this.MinimizeBox = false; } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } } } ``` 这种方式简单直接,通过设置窗体的边框样式来固定窗体大小,禁止用户通过拖动边框改变窗体大小 [^2]。 #### 方式二:重写 `WndProc` 方法禁止拖动和双击标题栏改变大小 通过重写 `WndProc` 方法,截获鼠标左键在标题栏按下和双击的消息,阻止其默认行为,从而禁止通过拖动、双击标题栏改变窗体大小。示例代码如下: ```csharp public const int WM_NCLBUTTONDBLCLK = 0xA3; const int WM_NCLBUTTONDOWN = 0x00A1; const int HTCAPTION = 2; protected override void WndProc(ref Message m) { if (m.Msg == WM_NCLBUTTONDOWN && m.WParam.ToInt32() == HTCAPTION) return; if (m.Msg == WM_NCLBUTTONDBLCLK) return; base.WndProc(ref m); } ``` 该方法主要解决了在窗体初始化时禁用最大化按钮并最大化后,仍能通过拖动、双击标题栏改变窗体大小的问题 [^1]。 #### 方式三:截获 Windows 消息 通过重写 `WndProc` 方法,截获系统命令消息,对最小化、还原、最大化等操作进行处理,以禁止改变窗体大小。示例代码如下: ```csharp protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_SYSCOMMAND: switch (m.WParam.ToInt32()) { case SC_MINIMIZE: base.WndProc(ref m); // 捕获最小化消息 break; case SC_RESTORE: base.WndProc(ref m); // 捕获还原消息 break; case SC_MAXIMIZE: this.Width = this.panel1.Width + this.textBox_Receiv.Width + 100; this.Height = this.panel1.Height * 20; // base.WndProc(ref m); // 捕获最大化消息 break; case SC_SIZEChange: // 处理大小改变消息 break; } break; } base.WndProc(ref m); } ``` 此方法可以对各种系统命令消息进行精细控制,根据不同的消息类型进行相应的处理 [^4]。 ### 可视化界面设置方式 在 Visual Studio 的设计界面中,点击窗口,选择【属性】界面,找到【FormBorderStyle】选项,在选项列表中选择【FixedDialog】,即可固定窗口大小,禁止对窗口进行自由调整 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值