如何判断Form的Icon为Nothing或使用默认图标?
判断WinForms窗体是否使用默认图标的方法
你遇到的问题很常见——WinForms里的Form.Icon属性在未手动设置时,并不会是Nothing,而是自动加载了系统或应用程序的默认图标,所以直接用Is Nothing判断肯定无效。下面给你几种可行的解决方案:
方案一:对比默认窗体图标
新建一个未做任何修改的空白Form,它的Icon就是系统默认的窗体图标,我们可以拿它和当前窗体的Icon做对比:
' 获取默认窗体图标(新建一个临时Form来获取) Using tempForm As New Form() Dim defaultIcon As Icon = tempForm.Icon ' 对比当前窗体的Icon是否与默认一致 If Me.Icon.Equals(defaultIcon) Then MsgBox("当前使用的是默认图标") Else MsgBox("当前使用的是自定义图标") End If End Using
⚠️ 注意:如果你的应用程序本身设置了自定义的默认图标(比如在项目属性里指定了图标),那这个临时Form的Icon会是你项目设置的那个,这也符合“默认图标”的预期。
方案二:跟踪是否手动设置过Icon
如果你需要严格区分“从未设置过Icon”和“手动设置了和默认一样的Icon”,可以通过自定义属性来跟踪状态:
' 在你的Form类里添加私有变量和自定义属性 Private _isIconManuallySet As Boolean = False Public Property FormIcon As Icon Get Return MyBase.Icon End Get Set(value As Icon) MyBase.Icon = value _isIconManuallySet = True End Set End Property ' 判断时使用这个变量 If _isIconManuallySet Then MsgBox("图标是手动设置的(即使和默认一样)") Else MsgBox("使用的是默认图标") End If
之后所有设置图标的操作都通过FormIcon属性来做,这样就能精准判断是否是用户主动设置的图标。
方案三:对比应用程序默认图标
如果你的应用程序在项目中指定了默认图标,可以直接提取应用程序的关联图标来对比:
Dim appDefaultIcon As Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath) If Me.Icon.Equals(appDefaultIcon) Then MsgBox("使用的是应用程序默认图标") Else MsgBox("使用的是自定义图标") End If
这种方法适合你想确认窗体是否用了项目打包时指定的默认图标场景。
内容的提问来源于stack exchange,提问作者Simos Sigma
相关产品推荐
相关产品推荐

