Прочитај на енглеском Уреди

Делите путем


ControlDesigner.InvokeTransactedChange Method

Definition

Wraps a series of changes into a transaction, using the specified parameters that can be rolled back as a unit with the undo functionality of the design host.

Overloads

InvokeTransactedChange(IComponent, TransactedChangeCallback, Object, String)

Wraps a series of changes into a transaction, using the specified parameters that can be rolled back as a unit with the undo functionality of the design host.

InvokeTransactedChange(IComponent, TransactedChangeCallback, Object, String, MemberDescriptor)

Wraps a series of changes into a transaction, using the specified parameters that can be rolled back as a unit with the undo functionality of the design host.

InvokeTransactedChange(IServiceProvider, IComponent, TransactedChangeCallback, Object, String, MemberDescriptor)

Wraps a series of changes into a transaction, using the specified parameters that can be rolled back as a unit with the undo functionality of the design host.

InvokeTransactedChange(IComponent, TransactedChangeCallback, Object, String)

Wraps a series of changes into a transaction, using the specified parameters that can be rolled back as a unit with the undo functionality of the design host.

C#
public static void InvokeTransactedChange(System.ComponentModel.IComponent component, System.Web.UI.Design.TransactedChangeCallback callback, object context, string description);

Parameters

component
IComponent

The control associated with the control designer.

callback
TransactedChangeCallback

A TransactedChangeCallback object representing a function to call in the control designer as part of the transaction.

context
Object

An object that contains the argument for callback.

description
String

A description of the effect of allowing the transaction to complete, which is used by the design host to give the user an opportunity to cancel the transaction.

Exceptions

component is null.

-or-

callback is null.

Examples

The following code example demonstrates how to create a simple composite control with a Label and a TextBox control, together with properties to set the label text, and also the Text, Width, and BackColor properties of the TextBox control. An associated control designer class creates three DesignerActionMethodItem commands, each of which sets two properties on the control. By using the InvokeTransactedChange method, you can use the undo functionality of the design host, such as Visual Studio 2005, to roll back each completed transaction as a unit.

C#
using System;
using System.Web;
using System.Web.UI;
using System.Drawing;
using System.Collections;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.ComponentModel;
using System.ComponentModel.Design;

namespace ASPNet.Samples
{
    // Create a custom control class with a Label and TextBox
    [System.Security.Permissions.PermissionSetAttribute(
        System.Security.Permissions.SecurityAction.InheritanceDemand,
        Name = "FullTrust")]
    [System.Security.Permissions.PermissionSetAttribute(
        System.Security.Permissions.SecurityAction.Demand,
        Name = "FullTrust")]
    [DesignerAttribute(typeof(SampleControlDesigner))]
    public class SampleControl : CompositeControl
    {
        int defaultWidth = 150;

        public SampleControl()
        {
        }

        // Create a set of public properties
        [Browsable(true), Bindable(true), DefaultValue(""),
            PersistenceMode(PersistenceMode.Attribute)]
        public string LabelText
        {
            get
            {
                EnsureChildControls();
                return MyLabel.Text;
            }
            set
            {
                EnsureChildControls();
                MyLabel.Text = value;
            }
        }

        [Browsable(true), Bindable(true), DefaultValue(""),
            PersistenceMode(PersistenceMode.Attribute)]
        public string BoxText
        {
            get
            { 
                EnsureChildControls();
                return MyTextBox.Text;
            }
            set
            {
                EnsureChildControls();
                MyTextBox.Text = value;
            }
        }

        [Browsable(true), Bindable(true), Category("Appearance"),
            PersistenceMode(PersistenceMode.Attribute)]
        public Unit BoxWidth
        {
            get
            {
                EnsureChildControls();
                return MyTextBox.Width;
            }
            set
            {
                EnsureChildControls();
                MyTextBox.Width = value;
            }
        }

        [Browsable(true), Bindable(true), Category("Appearance"),
            PersistenceMode(PersistenceMode.Attribute)]
        public override Color BackColor
        {
            get
            {
                EnsureChildControls();
                return MyTextBox.BackColor;
           }
            set
            {
                EnsureChildControls();
                MyTextBox.BackColor = value;
            }
        }

        // Create private properties
        private TextBox MyTextBox
        {
            get
            {
                EnsureChildControls();
                return (TextBox)FindControl("MyTextBox");
            }
        }
        private Label MyLabel
        {
            get
            {
                EnsureChildControls();
                return (Label)FindControl("MyLabel");
            }
        }

        // Create a label and a text box.
        protected override void CreateChildControls()
        {
            // Clear the controls
            Controls.Clear();

            // Create a Label control
            Label localLabel = new Label();
            localLabel.EnableViewState = false;
            localLabel.ID = "MyLabel";
            localLabel.Text = localLabel.ID + ": ";
            Controls.Add(localLabel);

            // Create a TextBox control
            TextBox localTextBox = new TextBox();
            localTextBox.ID = "MyTextBox";
            localTextBox.Width = defaultWidth;
            Controls.Add(localTextBox);
        }
    }

    // Create a designer class for the SampleControl
    [System.Security.Permissions.SecurityPermission(
        System.Security.Permissions.SecurityAction.Demand, 
        Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
    public class SampleControlDesigner : ControlDesigner
    {
        // Constructor
        public SampleControlDesigner() : base()
        {
        }

        // Do not allow resizing; force use of properties to set width
        public override bool AllowResize
        {
            get { return false; }
        }

        // Create a custom ActionLists collection
        public override DesignerActionListCollection ActionLists
        {
            get
            {
                // Create the collection
                DesignerActionListCollection actionLists = new DesignerActionListCollection();

                // Get the base items, if any
                actionLists.AddRange(base.ActionLists);

                // Add a custom list of actions
                actionLists.Add(new CustomControlActionList(this));

                return actionLists;
            }
        }

        // Create an embedded DesignerActionList class
        private class CustomControlActionList : DesignerActionList
        {
            // Create private fields
            private SampleControlDesigner _parent;
            private DesignerActionItemCollection items;

            // Constructor
            public CustomControlActionList(SampleControlDesigner parent)
                : base(parent.Component)
            {
                _parent = parent;
            }

            // Create a set of transacted callback methods
            // Callback for the wide format
            public void FormatWide()
            {
                SampleControl ctrl = (SampleControl)_parent.Component;
                
                // Create the callback
                TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat);
                // Create the transacted change in the control
                ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatWide", "Use a wide format");
            }

            // Callback for the medium format
            public void FormatMedium()
            {
                SampleControl ctrl = (SampleControl)_parent.Component;
                
                // Create the callback
                TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat);
                // Create the transacted change in the control
                ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatMedium", "Use a medium format");
            }

            // Callback for the narrow format
            public void FormatNarrow()
            {
                SampleControl ctrl = (SampleControl)_parent.Component;
                
                // Create the callback
                TransactedChangeCallback toCall = new TransactedChangeCallback(DoFormat);
                // Create the transacted change in the control
                ControlDesigner.InvokeTransactedChange(ctrl, toCall, "FormatNarrow", "Use a narrow format");
            }

            // Get the sorted list of Action items
            public override DesignerActionItemCollection GetSortedActionItems()
            {
                if (items == null)
                {
                    // Create the collection
                    items = new DesignerActionItemCollection();

                    // Add a header to the list
                    items.Add(new DesignerActionHeaderItem("Select a Style:"));

                    // Add three commands
                    items.Add(new DesignerActionMethodItem(this, "FormatWide", "Format Wide", true));
                    items.Add(new DesignerActionMethodItem(this, "FormatMedium", "Format Medium", true));
                    items.Add(new DesignerActionMethodItem(this, "FormatNarrow", "Format Narrow", true));
                }
                return items;
            }

            // Function for the callbacks to call
            public bool DoFormat(object arg)
            {
                // Get a reference to the designer's associated component
                SampleControl ctl = (SampleControl)_parent.Component;

                // Get the format name from the arg
                string fmt = (string)arg;

                // Create property descriptors
                PropertyDescriptor widthProp = TypeDescriptor.GetProperties(ctl)["BoxWidth"];
                PropertyDescriptor backColorProp = TypeDescriptor.GetProperties(ctl)["BackColor"];

                // For the selected format, set two properties
                switch (fmt)
                {
                    case "FormatWide":
                        widthProp.SetValue(ctl, Unit.Pixel(250));
                        backColorProp.SetValue(ctl, Color.LightBlue);
                        break;
                    case "FormatNarrow":
                        widthProp.SetValue(ctl, Unit.Pixel(100));
                        backColorProp.SetValue(ctl, Color.LightCoral);
                        break;
                    case "FormatMedium":
                        widthProp.SetValue(ctl, Unit.Pixel(150));
                        backColorProp.SetValue(ctl, Color.White);
                        break;
                }
                _parent.UpdateDesignTimeHtml();

                // Return an indication of success
                return true;
            }
        }
    }
}

Remarks

The implementation of the InvokeTransactedChange method notifies the design host, which is determined by the Site property of component, that a change is occurring in the associated control and, if the change is not canceled by the design host, invokes the specified callback using the specified context, and then notifies the design host that the change has completed.

If the design host or the associated control throws a static Canceled exception field of a CheckoutException exception, the transaction is canceled without invoking callback.

See also

Applies to

.NET Framework 4.8.1 и друге верзије
Производ Верзије
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

InvokeTransactedChange(IComponent, TransactedChangeCallback, Object, String, MemberDescriptor)

Wraps a series of changes into a transaction, using the specified parameters that can be rolled back as a unit with the undo functionality of the design host.

C#
public static void InvokeTransactedChange(System.ComponentModel.IComponent component, System.Web.UI.Design.TransactedChangeCallback callback, object context, string description, System.ComponentModel.MemberDescriptor member);

Parameters

component
IComponent

The control associated with the control designer.

callback
TransactedChangeCallback

A TransactedChangeCallback object representing a function to call in the control designer as part of the transaction.

context
Object

An object that contains the argument for callback.

description
String

A description of the effect of allowing the transaction to complete, which is used by the design host to give the user an opportunity to cancel the transaction.

member
MemberDescriptor

A MemberDescriptor object (typically, either an EventDescriptor or a PropertyDescriptor object) that describes the member of the associated control that is being invoked as part of the transaction.

Exceptions

component is null.

-or-

callback is null.

Examples

For a code example, see InvokeTransactedChange(IComponent, TransactedChangeCallback, Object, String).

Remarks

The implementation of the InvokeTransactedChange method notifies the design host, which is determined by the Site property of component, that a change is occurring to the specified member (property or method) of the associated control and, if the change is not canceled by the design host, invokes the specified callback using the specified context as the argument, and then notifies the design host that the change has completed.

If the design host or associated control throws a static Canceled exception field of a CheckoutException exception, the transaction is canceled without invoking callback.

See also

Applies to

.NET Framework 4.8.1 и друге верзије
Производ Верзије
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

InvokeTransactedChange(IServiceProvider, IComponent, TransactedChangeCallback, Object, String, MemberDescriptor)

Wraps a series of changes into a transaction, using the specified parameters that can be rolled back as a unit with the undo functionality of the design host.

C#
public static void InvokeTransactedChange(IServiceProvider serviceProvider, System.ComponentModel.IComponent component, System.Web.UI.Design.TransactedChangeCallback callback, object context, string description, System.ComponentModel.MemberDescriptor member);

Parameters

serviceProvider
IServiceProvider

An IServiceProvider object representing the design host that provides control designer services for the associated control.

component
IComponent

The control associated with the control designer.

callback
TransactedChangeCallback

A TransactedChangeCallback object representing a function to call in the control designer as part of the transaction.

context
Object

An object that contains the argument for callback.

description
String

A description of the effect of allowing the transaction to complete, which is used by the design host to give the user an opportunity to cancel the transaction.

member
MemberDescriptor

A MemberDescriptor object (typically either an EventDescriptor or a PropertyDescriptor object) that describes the member of the associated control that is being invoked as part of the transaction.

Exceptions

component is null.

-or-

callback is null.

-or-

serviceProvider is null.

Examples

For a code example, see InvokeTransactedChange.

Remarks

The implementation of the InvokeTransactedChange method notifies the design host, which is represented by serviceProvider, that a change is occurring to the specified member (property or method) of the associated control and, if the change is not canceled by the design host, invokes the specified callback using the specified context as the argument, and then notifies the design host that the change has completed.

If the design host or the associated control throws a static Canceled exception field of a CheckoutException exception, the transaction is canceled without invoking callback.

See also

Applies to

.NET Framework 4.8.1 и друге верзије
Производ Верзије
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1