2016-11-08 3 views
1

Ich versuche, diese Mini-Farbe mit drei Tasten (Linie, Kreis und Rechteck) zu machen. Bei jedem Klicken auf die Schaltfläche wird eine verwandte Form mit zufälliger Farbe und Startpunkt gedruckt. Ich habe diese Combo-Box, so dass der Benutzer eine Form wählt und sehen Sie seine Eigenschaften im Property:Eigenschaften mit Eigenschaftenraster ändern

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 und r neue Objekte aus Kreis, Linie oder Rechteck-Klasse. Jetzt möchte ich in der Lage sein, Eigenschaften mit propertyGrid zu überschreiben, wie zB die Farbe einer Kreisfarbe oder den Startpunkt. etwas wie:

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

also wie soll ich das schreiben?

+0

Was Sie getan haben, ist ausreichend, damit das 'PropertyGrid' die Eigenschaften der Shapes bearbeiten kann. Wenn Sie möchten, dass die Darstellung auf dem Bildschirm geändert wird, stellen Sie sicher, dass Sie Ihre Zeichenaufrufe auf denselben Forminstanzen basieren, die Sie im 'PropertyGrid' ändern. Denken Sie auch daran, alle Ihre Zeichnungen in einer 'OnPaint'-Methode oder einem' Paint'-Event-Handler auszuführen und das Steuerelement durch einen Aufruf von 'Invalidate()' ungültig zu machen, wenn sich Eigenschaften ändern. – adv12

+0

WinForms? WPF? WebForms? MVC? –

Antwort

1

Der Trick ist: Sie müssen nichts tun. Wenn Sie Ihre Objektinstanz mit der Einstellung propertyGrid1.SelectedObject = XXX an das PropertyGrid binden, sind Sie bereits fertig. Das Raster füllt automatisch seine Editoren, um die Bearbeitung dieser Werte zu ermöglichen. Indem Sie sie ändern, werden die Werte automatisch in die entsprechende Klasseninstanz zurückgeschrieben.

Go es versuchen und eine vollständige geblasene Eigenschaft Implementierung in Ihren Klassen wie diese

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

und setzt in dem Setter einen Haltepunkt schreiben. Sie werden sehen, dass es aufgerufen wird, wenn Sie den Wert auf der Benutzeroberfläche ändern.

Wie auch immer - jetzt haben Sie die Werte wieder in Ihrer Klasseninstanz. Fein. Aber jetzt müssen Sie Ihre Anwendung auslösen, um irgendetwas damit zu tun. In der Regel sollte sich ein Steuerelement jetzt selbst für ungültig erklären, um erneut zu malen, um diese Änderung in der Benutzeroberfläche sichtbar zu machen. Abhängig von Ihrer Anwendungslogik können Sie INotifyPropertyChanged in Ihrer Zirkel-, Rechteck- und Linienklasse implementieren und darauf reagieren. Sehen Sie hier für weitere Details: Implementing INotifyPropertyChanged - does a better way exist?

+0

was ist _radius hier? – sara

+0

Nur eine Membervariable, die einen int-Wert enthält. Eigentlich nur eine sehr einfache Implementierung von Eigenschaften. – Waescher

Verwandte Themen