You need to enable JavaScript to run this app. 通过Control.DefaultSize获取Form默认尺寸时代码报错的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

通过Control.DefaultSize获取Form默认尺寸时代码报错的解决方法

报错原因梳理
  • 拼写错误:原代码将属性名DefaultSize误写为DeafultSize,字母顺序颠倒,会触发“成员未定义”的编译错误
  • 调用方式误用:DefaultSize是类的只读属性,并非方法,原代码在属性名后添加圆括号(),不符合属性调用的语法规则
  • 访问权限不匹配:重点注意 Control.DefaultSize是Protected修饰的受保护成员,仅能在Control的派生类内部访问,在模块等外部代码中直接调用Form实例的该属性,会触发访问级别不足的报错
正确实现方案

根据不同的取值需求,可选择对应方案:

方案1:读取Form类内置定义的原始默认尺寸

如果需要严格获取Control.DefaultSize属性对应的内部定义值,需要自定义Form派生类,将受保护的DefaultSize属性暴露为公共可访问,完整可运行代码如下:

Imports System.Windows.Forms
Imports System.Drawing

' 自定义Form派生类,暴露受保护的默认尺寸属性
Public Class ExposedForm
    Inherits Form
    ' 封装基类的受保护属性,改为公共可访问
    Public ReadOnly Property ExposedDefaultSize As Size
        Get
            Return MyBase.DefaultSize
        End Get
    End Property
End Class

Module Module1
    Sub Main()
        Dim form1 As New ExposedForm()
        Dim store As System.Drawing.Size
        ' 正确调用暴露后的属性,无需添加圆括号
        store = form1.ExposedDefaultSize
        Console.WriteLine("窗体默认高度: {0}", store.Height)
        Console.WriteLine("窗体默认宽度: {0}", store.Width)
        Application.Run(form1)
    End Sub
End Module

方案2:获取新建Form实例的实际运行初始尺寸

如果仅需要拿到新建Form实例、未做任何属性修改的实际显示大小,无需自定义派生类,直接读取Form公开的Size属性即可,代码更简洁:

Imports System.Windows.Forms
Imports System.Drawing

Module Module1
    Sub Main()
        Dim form1 As New Form()
        ' 新建窗体实例自动初始化的实际默认尺寸
        Dim store As System.Drawing.Size = form1.Size
        Console.WriteLine("窗体默认高度: {0}", store.Height)
        Console.WriteLine("窗体默认宽度: {0}", store.Width)
        Application.Run(form1)
    End Sub
End Module

注意 该方式获取的是包含窗体标题栏、边框的整体窗口尺寸,和Control.DefaultSize定义的客户区初始尺寸存在数值差异。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 14:15:04