Compartilhar via


Objetos de provedor do extensor

Um provedor do extensor é um componente que fornece propriedades para outros componentes. Por exemplo, quando um ToolTip é adicionado a um formulário, ele fornece uma propriedade chamada ToolTip a cada controle no formulário. O ToolTip propriedade aparece na Propriedades janela para cada controle e permite ao desenvolvedor definir um valor para essa propriedade em tempo de design.

A propriedade fornecida pelo provedor extender realmente reside no próprio objeto de provedor extender e, portanto, não é uma propriedade true do componente, que ele modifica. Em tempo de design, a propriedade será exibido na Propriedades janela para o componente que está sendo modificado. Em tempo de execução, no entanto, a propriedade não pode ser acessada por meio do próprio componente. No exemplo de código a seguir, um formulário foi criado com um botão chamado MyButton e um ToolTip controle chamado MyToolTip, que fornece uma ToolTip propriedade.

' This is an example of code that is NOT CORRECT!
Dim myString as String
myString = MyButton.ToolTip
// This is an example of code that is NOT CORRECT!
string myString;
myString = MyButton.ToolTip;

Essa sintaxe gerará um erro de compilação porque o compilador não reconhece ToolTip como uma propriedade do MyButton, porque a propriedade, na verdade, é fornecida por MyToolTip. O exemplo a seguir mostra como acessar corretamente a propriedade:

Dim myString as String
myString = MyToolTip.GetToolTip(MyButton)
string myString;
myString = MyToolTip.GetToolTip(MyButton);

O provedor do extensor é uma classe e como tal pode ter suas próprias propriedades e métodos. Para designar uma propriedade como a propriedade a ser fornecido a outros componentes, você aplicar o ProvidePropertyAttribute atributo no nível da classe. Este atributo especifica o nome da propriedade para fornecer e o tipo de objeto, ele pode fornecer essa propriedade. Por convenção, a propriedade fornecida não é implementada como uma propriedade, mas como um par de métodos. Esses métodos devem ter "Get" e "Sapo" adicionado ao início do nome da propriedade a ser fornecido. A exemplo a seguir mostra como.

Imports System.ComponentModel
<ProvideProperty("MyText", GetType(Control))> Public Class MyExtender
   <ExtenderProvidedProperty()> Public Function GetMyText(acontrol as _
      Control) as String
      ' Insert code to implement function.
   End Function
   Public Sub SetMytext (acontrol as Control)
      ' Insert code to implement function.
   End Function
End Class
using System.ComponentModel;
[ProvideProperty("MyText", typeof("Control"))]
public class MyExtender
{
[ExtenderProvidedProperty()]
   public string GetMyText(Control acontrol)
   {
      // Insert code to implement method.
   }
   public void SetMyText(Control acontrol)
   {
      // Insert code to implement method.
   }
}

A implementação da propriedade fornecida exigirá uma Hashtable ou alguns outro tal objeto da coleção para gravar e recuperar os valores de propriedade para cada controle. Para obter detalhes, consulte:Como: Implementar um provedor Extender.

Cada classe extender também deve implementar a IExtenderProvider interface. Essa interface consiste em um único método, CanExtend, que retorna um valor Boolean e indica para o designer, se um componente é um candidato para ser estendido ou não. Por exemplo, convém criar um extensor que fornece uma propriedade somente para controles. O exemplo a seguir mostra como implementar a CanExtend método:

Imports System.ComponentModel
Public Function CanExtend(ByVal extendee As Object) As Boolean _
   Implements IExtenderProvider.CanExtend
   If Typeof extendee Is Control Then
      Return True
   Else
      Return False
   End If
End Function
public bool CanExtend(object extendee) 
{
   if (extendee is Control)
      return true;
   else
      return false;
}

Consulte também

Tarefas

Como: Implementar um provedor Extender

Como: Implementar um provedor Extender HelpLabel

Referência

IExtenderProvider

ProvidePropertyAttribute

Outros recursos

Provedores de extensor