用属性网格改变属性

本文关键字:属性 改变 网格 | 更新日期: 2023-09-27 18:17:04

我正在尝试用三个按钮(线,圆和矩形)制作这个迷你油漆。在每个按钮点击,一个相关的形状随机颜色和起点将被打印。我创建了这个组合框,以便用户选择一个形状并在propertyGrid:

中看到它的属性
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    switch (comboBox1.SelectedItem.ToString())
    {
        case "circle":
            {
                propertyGrid1.SelectedObject = c;
            }
            break;
        case "line":
            { 
               propertyGrid1.SelectedObject = l;
            }
            break;
        case "rectangle":
            {
                propertyGrid1.SelectedObject = r;
            }
            break;
        default:
            break;
    }
}

c,l和r是来自circle, line或rectangle类的新对象。现在我希望能够使用propertyGrid覆盖属性,如改变一个圆圈的颜色或起点。比如:

private void propertyGrid1_Click(object sender, EventArgs e)
{
    circle.changeproperties=Griditem.value;  
}

我该怎么写呢?

用属性网格改变属性

诀窍是:你不需要做任何事情。通过设置propertyGrid1.SelectedObject = XXX将对象实例绑定到PropertyGrid,您已经完成了。网格将自动填充其编辑器,从而可以编辑该值。通过更改它们,值将自动写回相应的类实例。

去尝试一下,在你的类中编写一个完整的属性实现,就像这样

    public int Radius
    {
        get { return _radius; }
        set { _radius = value; }
    }

并在setter中放置断点。你会看到,如果你改变UI中的值,它会被调用。

无论如何-现在你在你的类实例中得到了值。很好。但是现在您必须触发应用程序对它执行任何操作。通常,控件现在应该使自己失效,以触发其再次绘制,使更改在UI中可见。根据您的应用程序逻辑,您可以在Circle, Rectangle和Line类中实现INotifyPropertyChanged并对其进行反应。实现INotifyPropertyChanged——是否存在更好的方法?