防止在 propertygrid 的下拉元素中编辑项目

Prevent editing items within dropdown element of propertygrid

我有以下代码,它在 属性 网格中显示可选项目的下拉列表,通常工作正常。但是,下拉列表允许编辑下拉列表中的项目,这会导致 'System.ComponentModel.EnumConverter.ConvertFrom' 出现错误,因为它不是有效的枚举。比如Option1可以改成我要防止的OptionABC1

PropertyStoreItem 上有一个标志可将其设置为只读,但这可以防止整个 属性 被更改,而不是防止编辑下拉项。

如何使下拉列表不可编辑,但仍允许选择固定列表?它可能是 属性 网格上的 属性 我需要更改但找不到它。

[Flags]
Public Enum SomePropertyTypes
{
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8,
    Option5 = 16,
    Option6 = 32
}

public partial class AddSomePropertyForm : RadForm
{
    private RadPropertyStore store;

    Public AddSomePropertyForm()
    {
        InitializeComponent();
        this.store = this.CreatePropertyStore();
        this.radPropertyGrid1.SelectedObject = store;
    }

    private RadPropertyStore CreatePropertyStore()
    {
        RadPropertyStore somePropertyStore = new RadPropertyStore();
        PropertyStoreItem somePropertyType = new PropertyStoreItem(typeof(SomePropertyTypes), "PropertyName", SomePropertyTypes.Option1, "Property Info", "Group1", false);
        somePropertyStore.Add(somePropertyType);
        return somePropertyStore;
    }
}

将组合框 DropDownStyle 属性 设置为 ComboBoxStyle.DropDownList - 听起来当前设置为 ComboBoxStyle.DropDown,允许编辑。

参考ComboBoxStyle Enumeration

您应该使用 EditorInitialized 事件自定义下拉编辑器的行为。

   void radPropertyGrid1_EditorInitialized(object sender, PropertyGridItemEditorInitializedEventArgs e)
    {
        PropertyGridDropDownListEditor editor = e.Editor as PropertyGridDropDownListEditor;
        if (editor != null)
        {
            editor.DropDownStyle = RadDropDownStyle.DropDownList;
        }
    }

这是一篇关于此事的文章:link