Definieren von Standardwerten mit der ShouldSerialize-Methode und der Reset-Methode

ShouldSerialize und Reset sind optionale Methoden, die Sie für eine Eigenschaft bereitstellen können, wenn die Eigenschaft keinen einfachen Standardwert aufweist. Bei einem einfachen Standardwert hingegen sollten Sie das DefaultValueAttribute anwenden und den Standardwert stattdessen dem Konstruktor der Attributklasse zur Verfügung stellen. Durch beide Verfahren werden die folgenden Features des Designers aktiviert:

  • Wenn der Standardwert der Eigenschaft geändert wurde, wird dies im Eigenschaftenbrowser visuell angezeigt.

  • Der Benutzer kann mit der rechten Maustaste auf die Eigenschaft klicken und die Option Zurücksetzen wählen, um den Standardwert der Eigenschaft wiederherzustellen.

  • Der Designer generiert effizienteren Code.

    Tipp

    Wenden Sie entweder DefaultValueAttribute an, oder stellen Sie die ResetPropertyName-Methode und die ShouldSerializePropertyName-Methode bereit. Verwenden Sie nicht beide gleichzeitig.

Die ResetPropertyName-Methode setzt eine Eigenschaft auf ihren Standardwert zurück, wie im folgenden Codefragment dargestellt.

Public Sub ResetMyFont()
   MyFont = Nothing
End Sub
public void ResetMyFont() {
   MyFont = null;
}

Tipp

Wenn eine Eigenschaft nicht über eine Reset -Methode verfügt, nicht mit einem DefaultValueAttribute gekennzeichnet ist und in ihrer Deklaration nicht über einen Standardwert verfügt, ist die Option Reset für diese Eigenschaft im Kontextmenü des Eigenschaftenfenster im Windows Forms-Designer von Visual Studio deaktiviert.

Designer wie Visual Studio verwenden die ShouldSerializePropertyName-Methode, um zu überprüfen, ob der Standardwert einer Eigenschaft geändert wurde, und um Code in ein Formular zu schreiben, sofern eine Eigenschaft geändert wurde. Dadurch wird das Generieren von Code effizienter. Beispiel:

'Returns true if the font has changed; otherwise, returns false.
' The designer writes code to the form only if true is returned.
Public Function ShouldSerializeMyFont() As Boolean
   Return Not (thefont Is Nothing)
End Function
// Returns true if the font has changed; otherwise, returns false.
// The designer writes code to the form only if true is returned.
public bool ShouldSerializeMyFont() {
   return thefont != null;
}

Es folgt ein vollständiges Codebeispiel.

Option Explicit
Option Strict

Imports System
Imports System.Windows.Forms
Imports System.Drawing

Public Class MyControl
   Inherits Control
   
   ' Declare an instance of the Font class
   ' and set its default value to Nothing.
   Private thefont As Font = Nothing
   
   ' The MyFont property. 
   Public Property MyFont() As Font
      ' Note that the Font property never
      ' returns null.
      Get
         If Not (thefont Is Nothing) Then
            Return thefont
         End If
         If Not (Parent Is Nothing) Then
            Return Parent.Font
         End If
         Return Control.DefaultFont
      End Get
      Set
         thefont = value
      End Set
   End Property
   
   Public Function ShouldSerializeMyFont() As Boolean
      Return Not (thefont Is Nothing)
   End Function
   
   Public Sub ResetMyFont()
      MyFont = Nothing
   End Sub
End Class
using System;
using System.Windows.Forms;
using System.Drawing;

public class MyControl : Control {
   // Declare an instance of the Font class
   // and set its default value to null.
   private Font thefont = null;
  
   // The MyFont property.    
   public Font MyFont {
      // Note that the MyFont property never
      // returns null.
      get {
         if (thefont != null) return thefont;
         if (Parent != null) return Parent.Font;
         return Control.DefaultFont;
      }
      set {
         thefont = value;
      }
   }

   public bool ShouldSerializeMyFont() {
      return thefont != null;
   }
 
   public void ResetMyFont() {
      MyFont = null;
   }
}

Auch wenn der Wert der privaten Variable, der von der MyFont-Eigenschaft aufgerufen wird, in diesem Fall null lautet, wird im Eigenschaftenbrowser nicht null angezeigt. Stattdessen wird die Font-Eigenschaft des übergeordneten Elements angezeigt, sofern sie nicht null lautet, oder der in Control definierte Font-Standardwert. Daher kann der Standardwert für MyFont nicht einfach festgelegt werden, und ein DefaultValueAttribute kann auf diese Eigenschaft nicht angewendet werden. Stattdessen müssen die ShouldSerialize-Methode und Reset-Methode für die MyFont-Eigenschaft implementiert werden.

Siehe auch

Konzepte

Definieren einer Eigenschaft in Windows Forms-Steuerelementen

Durch geänderte Eigenschaften ausgelöste Ereignisse

Weitere Ressourcen

Eigenschaften von Windows Forms-Steuerelementen