You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio MDI窗体引用错误及Form2边框宽度查询

问题解答

嘿,刚接触Visual Studio和C#的话,遇到这种MDI窗体的小问题太正常了,我来帮你拆解清楚~

一、为什么Form2.Size.Width会报错?

你碰到的这个错误核心是混淆了类本身和类的实例对象:

  • Form2是你的窗体类,它更像一个“模板”,不是你实际打开的那个子窗体窗口;
  • this在Form2的代码里指代的是当前正在运行的Form2实例(就是你看得见的那个子窗体),所以this.Size.Width能正常获取到当前窗口的宽度。

而Form2.Size是试图直接访问类的静态属性,但Size是实例属性——必须通过具体的窗体对象才能调用。解决方法分两种情况:

  1. 如果是在Form2自己的代码里调整textBox宽度,直接用你之前的this.Size.Width -16就完全没问题;
  2. 如果是在父窗体Form1里要调整子窗体的textBox,那你需要先拿到打开的Form2实例:
    比如你打开子窗体的时候应该是这样写的:
    // 在Form1里打开Form2的代码
    Form2 myChildForm = new Form2();
    myChildForm.MdiParent = this;
    myChildForm.Show();
    
    之后要调整宽度时,就用这个myChildForm实例来访问Size:
    myChildForm.textBox1.Width = myChildForm.Size.Width -16;
    
    要是你找不到之前的实例,也可以通过Form1的MdiChildren集合来查找:
    // 遍历所有子窗体找到Form2实例
    foreach (Form child in this.MdiChildren)
    {
        if (child is Form2 targetForm)
        {
            targetForm.textBox1.Width = targetForm.Size.Width -16;
            break;
        }
    }
    

二、如何获取Form2的边框宽度?

获取窗体边框宽度有两种常用方法:

方法1:通过客户区和窗体大小的差值计算

窗体的ClientSize是内部可使用的区域(不含边框、标题栏),所以边框的总宽度/高度可以用窗体整体大小减去客户区大小得到:

// 在Form2的代码里
int totalBorderWidth = this.Width - this.ClientSize.Width; // 左右边框的总宽度
int singleBorderWidth = totalBorderWidth / 2; // 单边边框宽度(左或右)

int titleBarHeight = this.Height - this.ClientSize.Height; // 标题栏高度(含顶部边框)

方法2:使用SystemInformation类直接获取

C#提供了SystemInformation类可以直接获取系统UI元素的尺寸,不用自己计算,适配性更强:

using System.Windows.Forms; // 需要引用这个命名空间

// 单边边框的宽度
int borderWidth = SystemInformation.BorderSize.Width;
// 标题栏的高度
int titleBarHeight = SystemInformation.CaptionHeight;

内容的提问来源于stack exchange,提问作者JuMoGar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:04:54