Definindo valores padrão com o ShouldSerialize e métodos de reiniciar

ShouldSerialize e Reset são métodos opcionais que você pode fornecer para uma propriedade, se a propriedade não tem um valor padrão simples. Se a propriedade tiver um valor padrão simples, você deverá aplicar o DefaultValueAttribute e forneça o valor padrão para o construtor de classe de atributos em vez disso. Qualquer um desses mecanismos permite que os seguintes recursos no designer:

  • A propriedade fornece indicação visual no navegador da propriedade se ela tiver sido modificada em seu valor padrão.

  • O usuário pode clicar com o botão direito do mouse na propriedade e escolher reiniciar restauração a propriedade para seu valor padrão.

  • O designer gera um código mais eficiente.

    Observação:

    Tanto aplicar a DefaultValueAttribute ou forneça ResetPropertyName and ShouldSerializePropertyName métodos.Não use ambos.

The ResetPropertyName método define uma propriedade para o valor padrão, conforme mostrado no fragmento de código a seguir.

Public Sub ResetMyFont()
   MyFont = Nothing
End Sub
public void ResetMyFont() {
   MyFont = null;
}
Observação:

Se uma propriedade não tiver um Reset método, não é marcado com um DefaultValueAttributee não tem um valor padrão fornecido na sua declaração de Reset opção para essa propriedade é desabilitado no menu de atalho a Propriedades janela do Designer de Formulários do Windows Visual Studio.

Designers, sistema autônomo Visual Studio Use o ShouldSerializePropertyName método para verificar se uma propriedade foi alterado de seu valor padrão e escrever código para o formulário somente se uma propriedade for alterado, possibilitando que para a geração de código mais eficiente.Por exemplo:

'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;
}

Segue um exemplo de código completo.

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;
   }
}

Nesse caso, mesmo quando o valor da variável particular acessado pelo MyFont propriedade é null, o navegador de propriedade não é exibida null; em vez disso, ele exibe a Font propriedade de pai, se não for null, ou o padrão Font valor definido na Control. Assim, o valor padrão de MyFont não é possível conjunto simplesmente e um DefaultValueAttribute não pode ser aplicado a esta propriedade. Em vez disso, a ShouldSerialize e Reset métodos devem ser implementados para o MyFont propriedade.

Consulte também

Conceitos

Definindo uma propriedade em controles Windows Forms

Eventos de alteração de propriedade

Outros recursos

Propriedades em controles Windows Forms