如何为现有VB.NET类添加属性并实现预定义字体的调用与展示?
实现VB.NET类的预定义字体智能提示调用
首先先回顾你现有的类和调用代码:
现有类代码
Public Class myclass Public Property myfont() As String Get Return m_myfont End Get Set m_myfont = Value End Set End Property Private m_myfont As String End Class
现有调用代码
Dim myfont as new myclass myfont.myfont = "Arial"
你想要的是预定义一批字体,调用时能像myfont.FontSize = [预定义选项]那样,有智能提示(IntelliSense)直接选择,不用手动输入字符串对吧?这里给你两种实用的实现方案,都能满足需求:
方案一:用枚举(Enum)实现规范的选项提示
枚举是最适合这种固定选项场景的方案,能严格限制可选值,同时自带智能提示:
1. 先定义预定义字体的枚举
把你需要的预定义字体都放进枚举里(注意枚举名称不能有空格,后续可以自动转换为带空格的字体名):
Public Enum PredefinedFonts Arial TimesNewRoman Verdana Calibri CourierNew ' 可继续添加更多你需要的预定义字体 End Enum
2. 修改原类,添加枚举属性并同步原字符串属性
修改myclass,新增一个枚举类型的属性,让它和原有的myfont属性自动同步,这样两种调用方式都能生效:
Public Class myclass ' 原有的字符串类型字体属性,保留手动输入能力 Public Property myfont() As String Get Return m_myfont End Get Set m_myfont = Value End Set End Property Private m_myfont As String ' 新增的预定义字体属性,带智能提示 Public Property PredefinedFont() As PredefinedFonts Get ' 把现有字符串转换为枚举(匹配的话) If [Enum].IsDefined(GetType(PredefinedFonts), m_myfont.Replace(" ", "")) Then Return CType([Enum].Parse(GetType(PredefinedFonts), m_myfont.Replace(" ", "")), PredefinedFonts) Else ' 无匹配时返回默认值 Return PredefinedFonts.Arial End If End Get Set ' 把枚举值转换为带空格的标准字体名,同步到myfont属性 m_myfont = Value.ToString().Replace("New", " New") End Set End Property End Class
3. 调用示例
现在调用时输入myInstance.PredefinedFont = ,就能看到所有预定义字体的智能提示了:
Dim myInstance as new myclass ' 选择预定义字体,有智能提示 myInstance.PredefinedFont = PredefinedFonts.TimesNewRoman ' 此时myfont属性会自动变为"Times New Roman" ' 依然保留手动输入的能力 myInstance.myfont = "Microsoft YaHei"
方案二:用静态常量类实现灵活的字符串提示
如果你的预定义字体名带空格(比如"Times New Roman"),不想做转换,用静态常量类更直接:
1. 定义静态常量类
Public NotInheritable Class FontConstants ' 直接定义带空格的字体常量 Public Const Arial As String = "Arial" Public Const TimesNewRoman As String = "Times New Roman" Public Const Verdana As String = "Verdana" Public Const MicrosoftYaHei As String = "Microsoft YaHei" End Class
2. 调用示例
调用时输入FontConstants.就能看到所有预定义字体的智能提示:
Dim myInstance as new myclass myInstance.myfont = FontConstants.TimesNewRoman
两种方案各有优势:枚举更规范,能限制输入范围;静态常量更灵活,支持任意格式的字体名,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者Kitty
相关产品推荐
相关产品推荐

