PropertyGrid UITypeEditor禁用单元格编辑

时间:2015-05-12 14:40:24

标签: c# propertygrid uitypeeditor

我有一个属性网格,其中一个属性使用UITypeEditor来编辑值(在表单上)。

然而,该物业仍然可以编辑,我不想要。有没有办法做到这一点?我查看了这个类似的问题Propertygrid UIEditor disabling value editing through Keyboard,但它没有解决我的问题,因为解决方案是使用TypeConverter的简单下拉列表。

2 个答案:

答案 0 :(得分:4)

一种解决方案是声明TypeConverter做什么......没有,像这样:

这是您要编辑的课程:

public class MyClass
{
    [Editor(typeof(MyClassEditor), typeof(UITypeEditor))]
    [TypeConverter(typeof(MyConverter))]
    public string MyProperty { get; set; }
}

这是自定义UITypeEditor:

public class MyClassEditor : UITypeEditor
{
    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }

    public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    {
        MessageBox.Show("press ok to continue");
        return "You can't edit this";
    }
}

这是着名的转换器,花了我几天写:

// this class does nothing on purpose
public class MyConverter : TypeConverter
{
}

答案 1 :(得分:0)

我找到了这样的解决方法(PropertyGrid的PropertyValueChanged事件):

private void propertyGridNewBonus_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
            switch (e.ChangedItem.Label)
            {
                case "somePropertyLabel":
                    newBonus.somePropertyValue = e.OldValue.ToString();
                    break;
                default:
                    break;
            }
        }

只需在用户在propertyGrid中编辑旧值时恢复旧值。 这看起来像值是可编辑的,但是在恢复旧值后,所以更改它的唯一方法是使用自定义TypeConverter,UITypeEditor等。