Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

Classe ControlBuilder

Auxilia o analisador da página na criação de um controle e dos filho que ele contém.

System.Object
  System.Web.UI.ControlBuilder
    Mais...

Namespace:  System.Web.UI
Assembly:  System.Web (em System.Web.dll)
public class ControlBuilder

O tipo ControlBuilder expõe os membros a seguir.

  NomeDescrição
Método públicoControlBuilderInicializa uma nova instância da classe ControlBuilder.
Superior
  NomeDescrição
Propriedade públicaBindingContainerBuilderObtém o construtor de controle que corresponde ao recipiente de ligação para o controle que cria esse construtor.
Propriedade públicaBindingContainerTypeObtém o tipo de contêiner de ligação para o controle que cria esse construtor.
Propriedade públicaComplexPropertyEntriesObtém uma coleção de entradas de propriedade complexa.
Propriedade públicaControlTypeObtém o Type para o controle a ser criado.
Propriedade públicaCurrentFilterResolutionServiceObtém um IFilterResolutionService objeto que é usado para gerenciar o filtro de dispositivo serviços relacionados ao analisar e persistência controles no designer.
Propriedade públicaDeclareTypeObtém o tipo que será usado pela geração de código para declarar o controle.
Propriedade protegidaFChildrenAsPropertiesObtém um valor que determina se o controle tem um ParseChildrenAttribute com ChildrenAsProperties definido como true.
Propriedade protegidaFIsNonParserAccessorObtém um valor que determina se o controle implementa o IParserAccessor interface.
Propriedade públicaHasAspCodeObtém um valor indicando se o controle contém os blocos de código.
Propriedade públicaIDObtém ou define a propriedade de identificador para o controle a ser criado.
Propriedade protegidaInDesignerRetorna se o ControlBuilder está sendo executado no designer.
Propriedade protegidaInPageThemeObtém um valor booleano que indica se este ControlBuilder o objeto é usado para gerar temas de página.
Propriedade públicaItemTypeObtém o tipo definido no contêiner de ligação.
Propriedade públicaLocalizeObtém um valor booleano indicando se o controle que é criada por essa ControlBuilder objeto está localizado.
Propriedade públicaNamingContainerTypeInfraestrutura. Obtém o tipo de contêiner de nomeação para o controle que cria esse construtor.
Propriedade públicaPageVirtualPathObtém o caminho virtual de uma página a ser criado por esta ControlBuilder instância.
Propriedade protegidaParserInfraestrutura. Obtém o TemplateParser responsável pela análise de controle.
Propriedade públicaServiceProviderObtém o objeto de serviço para este ControlBuilder objeto.
Propriedade públicaSubBuildersObtém uma lista de filhos ControlBuilder objetos para este ControlBuilder objeto.
Propriedade públicaTagNameObtém o nome da marca do controle a ser criado.
Propriedade públicaTemplatePropertyEntriesObtém uma coleção de entradas de propriedade do modelo.
Propriedade públicaThemeResolutionServiceObtém um IThemeResolutionService objeto é usado em tempo de design para gerenciar o controle temas e capas.
Superior
  NomeDescrição
Método públicoAllowWhitespaceLiteralsDetermina se os literais de espaço em branco são permitidos no conteúdo entre um controle marcas de abertura e fechamento. Esse método é chamado pelo ASP.Estrutura da página NET.
Método públicoAppendLiteralStringAdiciona o conteúdo literal especificado a um controle. Esse método é chamado pelo ASP.Estrutura da página NET.
Método públicoAppendSubBuilderAdiciona construtores para o ControlBuilder objeto para quaisquer controles filhos que pertencem ao controle de recipiente.
Método públicoBuildObjectCria uma instância de tempo de design do controle que é conhecido por este ControlBuilder objeto.
Método públicoCloseControlChamado pelo analisador para informar o construtor que foi concluída a análise de abertura e marcas de fechamento do controle.
Método públicoMembro estáticoCreateBuilderFromTypeCria um ControlBuilder o nome da marca especificada e o tipo de objeto, bem como outros parâmetros definindo o construtor de objeto.
Método públicoEquals(Object) Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)
Método protegidoFinalize Permite que um objeto tente liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.)
Método públicoGetChildControlTypeObtém o Type do tipo de controle correspondente a uma marca filho. Esse método é chamado pelo ASP.Estrutura da página NET.
Método públicoGetHashCodeServe como uma função hash para um tipo específico. (Herdado de Object.)
Método públicoGetObjectPersistDataCria o ObjectPersistData objeto para esse ControlBuilder objeto.
Método públicoGetResourceKeyInfraestrutura. Recupera a chave de recurso para este ControlBuilder objeto.
Método públicoGetType Obtém o Type da instância atual. (Herdado de Object.)
Método públicoHasBodyDetermina se um controle tem uma abertura e a marca de fechamento. Esse método é chamado pelo ASP.Estrutura da página NET.
Método públicoHtmlDecodeLiteralsDetermina se a seqüência literal de um controle HTML deve ser HTML decodificada. Esse método é chamado pelo ASP.Estrutura da página NET.
Método públicoInitInicializa o ControlBuilder para uso depois é instanciado. Esse método é chamado pelo ASP.Estrutura da página NET.
Método protegidoMemberwiseCloneCria uma cópia superficial do Object atual. (Herdado de Object.)
Método públicoNeedsTagInnerTextDetermina se o construtor de controle precisa obter seu texto interno. Nesse caso, o SetTagInnerText método deve ser chamado. Esse método é chamado pelo ASP.Estrutura da página NET.
Método públicoOnAppendToParentBuilderNotifica o ControlBuilder que está sendo adicionado ao construtor controle pai.
Método públicoProcessGeneratedCodePermite que os desenvolvedores de controle personalizado acessar o modelo de objeto documento do código gerado (CodeDom) e inserir e modificar o código durante o processo de análise e criação de controles.
Método públicoSetResourceKeyInfraestrutura. Define a chave de recurso para este ControlBuilder objeto.
Método públicoSetServiceProviderInfraestrutura. Define o objeto de serviço para este ControlBuilder objeto.
Método públicoSetTagInnerTextFornece o ControlBuilder com o texto da marca de controle interno.
Método públicoToStringRetorna uma string que representa o objeto atual. (Herdado de Object.)
Superior
  NomeDescrição
Campo públicoMembro estáticoDesignerFilterRepresenta o "__designer" seqüência de caracteres literal.
Superior

Por padrão, todo controle numa página está associado a uma classe ControlBuilder . Durante a análise, o ASP.Estrutura da página NET cria uma árvore de ControlBuilder objetos correspondentes para a árvore de controles da página. O ControlBuilder árvore é usado para gerar o código de página para criar a árvore de controle. Além para controles filho, o ControlBuilder define o comportamento de como o conteúdo dentro de marcas é analisado. Você pode substituir esse comportamento padrão, definindo sua própria classe de construtor de controle personalizado. Isso é feito aplicando um ControlBuilderAttribute de atributo para sua classe de construtor do controle como segue:

[ControlBuilderAttribute(typeof(ControlBuilderType))]

O exemplo de código a seguir cria um Table controle cujos atributos e conteúdo é definido no momento em que a tabela é criada. É a seguinte linha de comando para usar para criar o executável.

[Visual Basic]

vbc /r:System.dll /r:System.Web.dll /r:System.Drawing.dll /t:library /out:myWebAppPath/Bin/vb_mycontrolbuilder.dll myControlBuilder.vb

[C#]

csc /t:library /out:myWebAppPath/Bin/cs_mycontrolbuilder.dll myControlBuilder.cs

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Drawing;
using System.Security.Permissions;

namespace CustomControls
{
	[AspNetHostingPermission(SecurityAction.Demand,
		Level = AspNetHostingPermissionLevel.Minimal)]
	public class MyTableCell : TableCell, INamingContainer { };

	[AspNetHostingPermission(SecurityAction.Demand,
		Level = AspNetHostingPermissionLevel.Minimal)]
	public class MyCell
	/*
	 * Class name: MyCell.
	 * Declares the class for the child controls to include in the control collection.
	 */
	{
		string _id;
		string _value;
		Color _backColor;

		public string CellID
		{
			get
			{ return _id; }
			set
			{ _id = value; }
		}

		public string Text
		{
			get
			{ return _value; }
			set
			{ _value = value; }
		}

		public Color BackColor
		{
			get
			{ return _backColor; }
			set
			{ _backColor = value; }
		}
	};

	[AspNetHostingPermission(SecurityAction.Demand,
	Level = AspNetHostingPermissionLevel.Minimal)]
	public class MyControlBuilder : ControlBuilder
	{

		public override Type GetChildControlType(string tagName, IDictionary attribs)
		{
			// Allows TableRow without "runat=server" attribute to be added to the collection.
			if (String.Compare(tagName, "mycell", true) == 0)
				return typeof(MyCell);
			return null;
		}

		public override void AppendLiteralString(string s)
		{
			// Ignores literals between rows.
		}

	}
	[AspNetHostingPermission(SecurityAction.Demand,
		Level = AspNetHostingPermissionLevel.Minimal)]
	[ControlBuilderAttribute(typeof(MyControlBuilder))]
	public class MyCS_CustomControl : Control, INamingContainer
	/*
	 * Class name: MyCS_CustomControl.
	 * Processes the element declarations within a control declaration. 
	 * This builds the actual control.
	 */
	{
		// Declares the custom control that must be built programmatically.
		Table _table;

		private String _title;
		private int _rows;
		private int _columns;

		Hashtable _cellObjects = new Hashtable();

		// Rows property to be used as the attribute name in the Web page.  
		public int Rows
		{
			get
			{ return _rows; }
			set
			{ _rows = value; }
		}

		// Columns property to be used as the attribute name in the Web page.
		public int Columns
		{
			get
			{ return _columns; }
			set
			{ _columns = value; }
		}

		// Title property to be used as the attribute name in the Web page.
		public string Title
		{
			get
			{ return _title; }
			set
			{ _title = value; }
		}

		protected void createNewRow(int rowNumber)
		{

			// Creates a row and adds it to the table.
			TableRow row;

			row = new TableRow();
			_table.Rows.Add(row);

			// Creates a cell that contains text.

			for (int y = 0; y < Columns; y++)
				appendCell(row, rowNumber, y);

		}

		protected void appendCell(TableRow row, int rowNumber, int cellNumber)
		{
			TableCell cell;
			TextBox textbox;

			cell = new TableCell();
			textbox = new TextBox();
			cell.Controls.Add(textbox);
			textbox.ID = "r" + rowNumber.ToString() + "c" + cellNumber.ToString();

			// Checks for the MyCell child object.
			if (_cellObjects[textbox.ID] != null)
			{
				MyCell cellLookup;
				cellLookup = (MyCell)_cellObjects[textbox.ID];

				textbox.Text = cellLookup.Text;
				textbox.BackColor = cellLookup.BackColor;
			}
			else
				textbox.Text = "Row: " + rowNumber.ToString() + " Cell: " +
				cellNumber.ToString();

			row.Cells.Add(cell);

		}

		// Called at runtime when a child object is added to the collection.  
		protected override void AddParsedSubObject(object obj)
		{
			MyCell cell = obj as MyCell;
			if (cell != null)
			{
				_cellObjects.Add(cell.CellID, cell);
			}

		}

		protected override void OnPreRender(EventArgs e)
		/*
		 * Function name: OnPreRender.
		 * Carries out changes affecting the control state and renders the resulting UI.
		*/
		{

			// Increases the number of rows if needed.
			while (_table.Rows.Count < Rows)
			{
				createNewRow(_table.Rows.Count);
			}

			// Checks that each row has the correct number of columns.
			for (int i = 0; i < _table.Rows.Count; i++)
			{
				while (_table.Rows[i].Cells.Count < Columns)
				{
					appendCell(_table.Rows[i], i, _table.Rows[i].Cells.Count);
				}

				while (_table.Rows[i].Cells.Count > Columns)
				{
					_table.Rows[i].Cells.RemoveAt(_table.Rows[i].Cells.Count - 1);
				}
			}
		}

		protected override void CreateChildControls()
		/*
		 * Function name: CreateChildControls.
		 * Adds the Table and the text control to the control collection.
		 */
		{
			LiteralControl text;

			// Initializes the text control using the Title property.
			text = new LiteralControl("<h5>" + Title + "</h5>");
			Controls.Add(text);

			_table = new Table();
			_table.BorderWidth = 2;
			Controls.Add(_table);
		}
	}
}


O exemplo de código a seguir usa o controle personalizado anterior. Em particular, ele cria uma tabela cujos atributos e conteúdo são definidos em tempo de execução. Observe que os valores mostrados na @ Register diretiva refletem a linha de comando anterior.


<%@ Page Language="C#" %>
<%@ Register TagPrefix="AspNetSamples" Assembly="cs_mycontrolbuilder" Namespace="CustomControls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ControlBuilder Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <AspNetSamples:MyCS_CustomControl id="Custom1" 
                                         title="Auto-Generated Table"
                                         columns="3"
                                         rows="3"  
                                         runat="server">
         <mycell cellid="r0c0" BackColor="red" text="red cell"></mycell>
         <mycell cellid="r2c2" BackColor="green" text="green cell"></mycell>
       </AspNetSamples:MyCS_CustomControl>
    </div>
    </form>
</body>
</html>


.NET Framework

Com suporte em: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte .Requisitos de sistema do NET Framework.
Quaisquer membros estático (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.
Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
© 2013 Microsoft. Todos os direitos reservados.