ControlBuilder Osztály

Definíció

Támogatja a lapelemzőt egy vezérlő és a benne található gyermekvezérlők létrehozásában.

public ref class ControlBuilder
public class ControlBuilder
type ControlBuilder = class
Public Class ControlBuilder
Öröklődés
ControlBuilder
Származtatott

Példák

Az alábbi példakód egy vezérlőt Table hoz létre, amelynek attribútumai és tartalma a tábla létrehozásakor van definiálva. A végrehajtható fájl létrehozásához a következő parancssor használható.

vbc /r:System.dll /r:System.Web.dll /r:System.Drawing.dll /t:library /out:myWebAppPath/Bin/vb_mycontrolbuilder.dll myControlBuilder.vb
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);
        }
    }
}
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Collections
Imports System.Drawing
Imports System.Security.Permissions


Namespace CustomControls

    <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
    Public Class MyTableCell
        Inherits TableCell
        Implements INamingContainer
    End Class


    <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
    Public Class MyCell
        Inherits Control
        Implements INamingContainer
        ' Class Name: MyCell.
        ' Declares the class for the child controls to be included in the control collection.

        Private _id As String
        Private _value As String
        Private _backColor As Color

        Public Property CellID() As String
            Get
                Return _id
            End Get
            Set(ByVal value As String)
                _id = value
            End Set
        End Property

        Public Property Text() As String
            Get
                Return _value
            End Get
            Set(ByVal value As String)
                _value = value
            End Set
        End Property


        Public Property BackColor() As Color
            Get
                Return _backColor
            End Get
            Set(ByVal value As Color)
                _backColor = value
            End Set
        End Property
    End Class

    <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
    Public Class MyControlBuilderVB
        Inherits ControlBuilder

        Public Overrides Function GetChildControlType(ByVal tagName As String, ByVal attribs As IDictionary) As Type

            ' Allows TableRow without "runat=server" attribute to be added to the collection.
            If (String.Compare(tagName, "mycell", True) = 0) Then
                Return GetType(MyCell)
            End If
            Return Nothing
        End Function

        ' Ignores literals between rows.
        Public Overrides Sub AppendLiteralString(ByVal s As String)
            ' Ignores literals between rows.
        End Sub

    End Class

    <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal), ControlBuilderAttribute(GetType(MyControlBuilderVB))> _
        Public Class MyVB_CustomControl
        Inherits Control
        Implements INamingContainer

        ' Class name: MyVB_CustomControl.
        ' Processes the element declarations within a control 
        ' declaration. This builds the actual control.

        ' Custom control to build programmatically.
        Private _table As Table

        Private _cellObjects As New Hashtable()

        ' Variables that must contain the control attributes as defined in the Web page.
        Private _rows As Integer
        Private _columns As Integer
        Private _title As String

        ' Rows property to be used as the attribute name in the Web page.     
        Public Property Rows() As Integer
            Get
                Return _rows
            End Get
            Set(ByVal value As Integer)
                _rows = value
            End Set
        End Property

        ' Columns property to be used as the attribute name in the Web page.

        Public Property Columns() As Integer
            Get
                Return _columns
            End Get
            Set(ByVal value As Integer)
                _columns = value
            End Set
        End Property

        ' Title property to be used as the attribute name in the Web page   
        Public Property Title() As String
            Get
                Return _title
            End Get
            Set(ByVal value As String)
                _title = value
            End Set
        End Property


        Protected Sub createNewRow(ByVal rowNumber As Integer)

            ' Creates a row and adds it to the table.
            Dim row As TableRow

            row = New TableRow()
            _table.Rows.Add(row)

            ' Creates a cell that contains text.
            Dim y As Integer
            For y = 0 To Columns - 1
                appendCell(row, rowNumber, y)
            Next y
        End Sub


        Protected Sub appendCell(ByVal row As TableRow, ByVal rowNumber As Integer, ByVal cellNumber As Integer)
            Dim cell As TableCell
            Dim textbox As 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 Not (_cellObjects(textbox.ID) Is Nothing) Then
                Dim cellLookup As MyCell
                cellLookup = CType(_cellObjects(textbox.ID), MyCell)

                textbox.Text = cellLookup.Text
                textbox.BackColor = cellLookup.BackColor

            Else
                textbox.Text = "Row: " + rowNumber.ToString() + " Cell: " + cellNumber.ToString()
            End If

            row.Cells.Add(cell)
        End Sub

        ' Called at runtime when a child object is added to the collection.
        Protected Overrides Sub AddParsedSubObject(ByVal obj As Object)

            Dim cell As MyCell = CType(obj, MyCell)
            If Not (cell Is Nothing) Then
                _cellObjects.Add(cell.CellID, cell)
            End If
        End Sub


        Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
            ' Sub 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)
            End While

            ' Checks that each row has the correct number of columns.
            Dim i As Integer
            For i = 0 To _table.Rows.Count - 1
                While _table.Rows(i).Cells.Count < Columns
                    appendCell(_table.Rows(i), i, _table.Rows(i).Cells.Count)
                End While

                While _table.Rows(i).Cells.Count > Columns
                    _table.Rows(i).Cells.RemoveAt((_table.Rows(i).Cells.Count - 1))
                End While
            Next i
        End Sub


        <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
        Protected Overrides Sub CreateChildControls()
            ' Sub name: CreateChildControls.
            ' Adds the Table and the text controls to the control collection. 


            Dim [text] As LiteralControl

            ' Initializes the text control using the Title property.
            [text] = New LiteralControl("<h5>" + Title + "</h5>")
            Controls.Add([text])


            _table = New Table()

            Controls.Add(_table)
        End Sub
    End Class

End Namespace

Az alábbi példakód az előző egyéni vezérlőt használja. Különösen olyan táblát hoz létre, amelynek attribútumai és tartalma futásidőben van meghatározva. Figyelje meg, hogy a @Register direktívában szereplő értékek az előző parancssort tükrözik.

<%@ 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>
<%@ Page Language="VB" %>
<%@ Register TagPrefix="AspNetSamples" Assembly="vb_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:MyVB_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:MyVB_CustomControl>
    </div>
    </form>
</body>
</html>

Megjegyzések

Alapértelmezés szerint egy lap összes vezérlőeleme egy alapértelmezett ControlBuilder osztályhoz van társítva. Az elemzés során a ASP.NET lap keretrendszere ControlBuilder objektumfát hoz létre, amely megfelel az oldal vezérlőinek. A ControlBuilder fa ezután a vezérlőfa létrehozásához használ oldalkódot. A gyermekvezérlők mellett a ControlBuilder vezérlőcímkéken belüli tartalom elemzésének viselkedését is meghatározza. Ezt az alapértelmezett viselkedést felülbírálhatja saját egyéni vezérlőszerkesztő-osztály definiálásával. Ez úgy történik, hogy egy ControlBuilderAttribute attribútumot alkalmaz a vezérlőszerkesztő osztályra az alábbiak szerint:

[ControlBuilderAttribute(typeof(ControlBuilderType))]

Konstruktorok

Name Description
ControlBuilder()

Inicializálja a ControlBuilder osztály új példányát.

Mezők

Name Description
DesignerFilter

A literális sztringet "__designer" jelöli.

Tulajdonságok

Name Description
BindingContainerBuilder

Lekéri a szerkesztő által létrehozott vezérlő kötéstárolójának megfelelő vezérlőszerkesztőt.

BindingContainerType

Lekéri a szerkesztő által létrehozott vezérlő kötéstárolójának típusát.

ComplexPropertyEntries

Összetett tulajdonságbejegyzések gyűjteményét kapja meg.

ControlType

Lekéri a Type létrehozandó vezérlőt.

CurrentFilterResolutionService

IFilterResolutionService Lekéri az eszközszűrővel kapcsolatos szolgáltatások kezeléséhez használt objektumot a tervező vezérlőinek elemzésekor és megőrzésekor.

DeclareType

Lekéri azt a típust, amelyet a kódgenerálás a vezérlő deklarálásához használ.

FChildrenAsProperties

Lekéri azt az értéket, amely meghatározza, hogy a vezérlőelem rendelkezik-e olyan értékkel, amely ParseChildrenAttribute a következőre ChildrenAsPropertiesvan true állítva: .

FIsNonParserAccessor

Olyan értéket kap, amely meghatározza, hogy a vezérlő implementálja-e az interfészt IParserAccessor .

HasAspCode

Beolvas egy értéket, amely jelzi, hogy a vezérlő tartalmaz-e kódblokkokat.

ID

Lekéri vagy beállítja a létrehozandó vezérlő azonosítótulajdonságát.

InDesigner

Azt adja vissza, hogy a ControlBuilder tervezőben fut-e.

InPageTheme

Logikai értéket kap, amely jelzi, hogy az ControlBuilder objektum használható-e laptémák létrehozására.

ItemType

Lekéri a típuskészletet a kötéstárolón.

Localize

Logikai értéket kap, amely jelzi, hogy az objektum által ControlBuilder létrehozott vezérlő honosított-e.

NamingContainerType

Lekéri a szerkesztő által létrehozott vezérlő elnevezési tárolójának típusát.

PageVirtualPath

Lekéri a példány által ControlBuilder létrehozandó lap virtuális elérési útját.

Parser

Lekéri a TemplateParser vezérlő elemzéséért felelőst.

ServiceProvider

Lekéri az objektum szolgáltatásobjektumát ControlBuilder .

SubBuilders

Lekéri az objektumhoz tartozó ControlBuilder gyermekobjektumok ControlBuilder listáját.

TagName

Lekéri a létrehozandó vezérlő címkenevét.

TemplatePropertyEntries

Sablontulajdonság-bejegyzések gyűjteményét kapja meg.

ThemeResolutionService

IThemeResolutionService Lekéri a tervezési időben használt objektumot a vezérlőtémák és a bőrök kezelésére.

Metódusok

Name Description
AllowWhitespaceLiterals()

Meghatározza, hogy a vezérlőelem nyitó és záró címkéi között engedélyezve van-e a tartalomban a szóközkonstansok használata. Ezt a metódust a ASP.NET lap keretrendszere hívja meg.

AppendLiteralString(String)

Hozzáadja a megadott literális tartalmat egy vezérlőelemhez. Ezt a metódust a ASP.NET lap keretrendszere hívja meg.

AppendSubBuilder(ControlBuilder)

Szerkesztőket ad hozzá az objektumhoz a ControlBuilder tárolóvezérlőhöz tartozó gyermekvezérlőkhöz.

BuildObject()

Létrehozza az objektum által ControlBuilder hivatkozott vezérlő tervezési idejű példányát.

CloseControl()

Az elemző meghívta, hogy tájékoztassa a szerkesztőt, hogy a vezérlő nyitó és záró címkéinek elemzése befejeződött.

CreateBuilderFromType(TemplateParser, ControlBuilder, Type, String, String, IDictionary, Int32, String)

Létrehoz egy objektumot ControlBuilder a megadott címkenévből és objektumtípusból, valamint a szerkesztőt meghatározó egyéb paraméterekből.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetChildControlType(String, IDictionary)

Beolvasja a Type gyermekcímkének megfelelő vezérlőtípust. Ezt a metódust a ASP.NET lap keretrendszere hívja meg.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetObjectPersistData()

Létrehozza az ObjectPersistData objektum objektumát ControlBuilder .

GetResourceKey()

Lekéri az objektum erőforráskulcsát ControlBuilder .

GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
HasBody()

Meghatározza, hogy egy vezérlő rendelkezik-e nyitó és záró címkével is. Ezt a metódust a ASP.NET lap keretrendszere hívja meg.

HtmlDecodeLiterals()

Meghatározza, hogy a HTML-vezérlők literális sztringjének HTML-dekódoltnak kell-e lennie. Ezt a metódust a ASP.NET lap keretrendszere hívja meg.

Init(TemplateParser, ControlBuilder, Type, String, String, IDictionary)

A példányosítás után inicializálja a ControlBuilder használatra szánt példányt. Ezt a metódust a ASP.NET lap keretrendszere hívja meg.

MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
NeedsTagInnerText()

Meghatározza, hogy a vezérlőszerkesztőnek be kell-e szereznie a belső szövegét. Ha igen, a SetTagInnerText(String) metódust meg kell hívni. Ezt a metódust a ASP.NET lap keretrendszere hívja meg.

OnAppendToParentBuilder(ControlBuilder)

Értesíti a ControlBuilder szülővezérlő-szerkesztőhöz való hozzáadásról.

ProcessGeneratedCode(CodeCompileUnit, CodeTypeDeclaration, CodeTypeDeclaration, CodeMemberMethod, CodeMemberMethod)

Lehetővé teszi, hogy az egyéni vezérlőkészítők hozzáférjenek a létrehozott kóddokumentum-objektummodellhez (CodeDom), és beszúrhassák és módosíthassák a kódot az elemzési és létrehozási vezérlők során.

SetResourceKey(String)

Beállítja az objektum erőforráskulcsát ControlBuilder .

SetServiceProvider(IServiceProvider)

Beállítja az objektum szolgáltatásobjektumát ControlBuilder .

SetTagInnerText(String)

ControlBuilder A vezérlőcímke belső szövegét adja meg.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

A következőre érvényes:

Lásd még