2016-11-08 142 views
1

我试图用三个按钮(线,圆和矩形)制作此迷你涂料。点击每个按钮后,将打印具有随机颜色和起点的相关形状。让用户选择的形状我做了这个组合框中看到的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从圆,直线或矩形类的新对象。现在我希望能够使用propertyGrid覆盖属性,例如更改圆圈颜色或起点。有些东西是这样的:

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

那么我该怎么写呢?

+0

你所做的是足以让'PropertyGrid'编辑形状的属性。如果您希望这样做改变屏幕上显示的内容,请确保您将绘图调用基于您在“PropertyGrid”中修改的相同形状实例。还要记住在“OnPaint”方法或“Paint”事件处理程序中执行所有绘图,并在属性更改时调用“Invalidate()”使控件失效。 – adv12

+0

WinForms? WPF?的WebForms? MVC? –

回答

1

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

去试试吧,写在你的类一个完全成熟的属性实现这样

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

将断点设置在二传手。如果您更改UI中的值,您会看到它会被调用。

无论如何 - 现在您已将值返回到您的类实例中。精细。但是现在你必须触发你的应用程序去做任何事情。通常情况下,控件应该立即使其自身失效以再次触发其绘画,以使UI中的变化可见。根据您的应用程序逻辑,您可以在Circle,Rectangle和Line类中实现INotifyPropertyChanged并对其作出反应。在这里看到更多的细节:Implementing INotifyPropertyChanged - does a better way exist?

+0

这里_radius是什么? – sara

+0

只是一个保存int值的成员变量。其实,只是一个非常基本的财产实施。 – Waescher