通过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
相关产品推荐
相关产品推荐

