2016-11-09 3 views
0

와 속성을 모양 :변경하기 내가 세 가지 값 (원, 사각형, 및 라인)이 콤보 상자가 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; 
    } 
} 

R, C, L은이 원형, 사각형 및 라인 군 수업에서 새로운 객체 이 모양은 내 패널에 인쇄되었고 PropertyGrid (원 색상 변경과 같은)을 통해 속성을 변경할 수 있기를 원합니다. 나는 같은 것을 시도했다 :

private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) 
{ 
    switch(propertyGrid1.SelectedGridItem.ToString()) 
    { 
     case GridItem=Color 
      { 

      } 
      . 
      . 
      . 
    } 

} 

그러나 나는 이것을 올바르게하는 방법을 모른다. 이걸로 나를 도울 수 있니?

+0

가 나는 버튼을 적용 건의 할 것입니다. 콤보 상자에서 모양을 선택하면 해당 속성을 propertyGrid에로드하고 사용자가이를 수정할 수있게 한 다음 속성을 가져 와서 모양을 다시 그려주는 단추를 직접 클릭합니다. – Poody

+0

이 버튼은 어떻게 작동합니까? – sara

+0

글쎄, _PropertyValueChanged로 편집하는 동안 propertyGrid를 읽는 대신 버튼 클릭으로 한번에 모두 읽을 수 있습니다. 사용자는 속성 편집을 마치면 버튼을 클릭합니다. – Poody

답변

0

위치 및 색상과 같은 속성이 포함 된 모양이 있어야합니다. 그런 다음 PictureBox 또는 Panel과 같은 컨트롤의 Paint 이벤트에서 모양을 그립니다. PropertyGrid을 사용하여 모양을 편집 할 때는 PropertyValueChanged 이벤트를 PropertyGrid으로 처리하고 도면 표면 컨트롤의 Invalidte 메서드를 호출하면 충분합니다.

내가 this post 여기에 만든 같은 모양, 사용의 모양을 가지고 있으며 이러한 이벤트를 사용하려면 :

ShapesList Shapes; 
private void Form3_Load(object sender, EventArgs e) 
{ 
    Shapes = new ShapesList(); 
    Shapes.Add(new RectangleShape() { Rectangle = new Rectangle(0, 0, 100, 100), 
     Color = Color.Green }); 
    Shapes.Add(new RectangleShape() { Rectangle = new Rectangle(50, 50, 100, 100), 
     Color = Color.Blue }); 
    Shapes.Add(new LineShape() { Point1 = new Point(0, 0), Point2 = new Point(150, 150), 
     Color = Color.Red }); 
    this.panel1.Invalidate(); 
    this.comboBox1.DataSource = Shapes; 
} 
private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) 
{ 
    this.panel1.Invalidate(); 
} 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    this.propertyGrid1.SelectedObject = this.comboBox1.SelectedItem; 
} 
private void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
    Shapes.Draw(e.Graphics); 
} 

enter image description here