用属性网格改变属性
本文关键字:属性 改变 网格 | 更新日期: 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——是否存在更好的方法?