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

如何为PropertyGrid绑定的类添加命令?VB示例代码求助

在WinForms PropertyGrid底部添加自定义重置命令

要在PropertyGrid底部显示针对SampleClass实例的重置命令,你需要通过类型描述扩展为类添加设计器动词(DesignerVerb),PropertyGrid会自动识别并展示这些动词作为底部操作链接。以下是具体实现步骤:

1. 实现自定义类型描述提供者

创建自定义的TypeDescriptionProvider和TypeDescriptor,用来为SampleClass添加重置动词:

Imports System.ComponentModel
Imports System.Windows.Forms.Design

Public Class SampleClassTypeDescriptionProvider
    Inherits TypeDescriptionProvider

    Public Sub New()
        MyBase.New(TypeDescriptor.GetProvider(GetType(SampleClass)))
    End Sub

    Public Overrides Function GetTypeDescriptor(ByVal objectType As Type, ByVal instance As Object) As ICustomTypeDescriptor
        Dim baseDescriptor = MyBase.GetTypeDescriptor(objectType, instance)
        Return New SampleClassTypeDescriptor(baseDescriptor, instance)
    End Function
End Class

Public Class SampleClassTypeDescriptor
    Inherits CustomTypeDescriptor
    Private ReadOnly _sampleInstance As SampleClass

    Public Sub New(parent As ICustomTypeDescriptor, instance As Object)
        MyBase.New(parent)
        _sampleInstance = DirectCast(instance, SampleClass)
    End Sub

    Public Overrides Function GetVerbs() As DesignerVerbCollection
        Dim verbs = MyBase.GetVerbs()
        ' 添加重置实例的动词
        verbs.Add(New DesignerVerb("重置实例", AddressOf OnResetInstance))
        Return verbs
    End Function

    Private Sub OnResetInstance(sender As Object, e As EventArgs)
        ' 调用实例的Reset方法
        _sampleInstance.Reset()
        ' 通知PropertyGrid刷新属性值
        With TypeDescriptor.GetProperties(_sampleInstance)
            .Item("Value1").ResetValue(_sampleInstance)
            .Item("Value2").ResetValue(_sampleInstance)
        End With
    End Sub
End Class

2. 为SampleClass绑定类型描述提供者

修改SampleClass,添加TypeDescriptionProviderAttribute指定我们的自定义提供者:

<TypeDescriptionProvider(GetType(SampleClassTypeDescriptionProvider))>
Public Class SampleClass
    Public Const DefValue = 1
    Public Property Value1 As Integer = DefValue
    Public Property Value2 As Integer = DefValue
    Public Sub Reset()
        Value1 = DefValue
        Value2 = DefValue
    End Sub
End Class

3. 验证效果

运行窗体后,PropertyGrid底部会出现「重置实例」的操作链接,点击后会执行SampleClass的Reset方法,同时PropertyGrid会自动刷新显示属性的默认值。

补充说明

  • 如果需要为单个属性添加重置选项,只需给属性添加DefaultValueAttribute,右键属性即可看到重置选项;
  • 若你的类继承自Component,也可以通过添加DesignerAttribute并在自定义Designer中添加DesignerVerb来实现,不过对于普通类,使用TypeDescriptionProvider是更通用的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:40:59