Ағылшын тілінде оқу

Бөлісу құралы:


ToolboxItem Класс

Определение

Обеспечивает базовую реализацию элемента панели инструментов.

[System.Serializable]
public class ToolboxItem : System.Runtime.Serialization.ISerializable
public class ToolboxItem : System.Runtime.Serialization.ISerializable
Наследование
ToolboxItem
Производный
Атрибуты
Реализации

Примеры

В следующем примере кода предоставляется компонент, который использует IToolboxService интерфейс для добавления обработчика формата текстовых данных или ToolboxItemCreatorCallbackна панель элементов . Делегат обратного вызова создателя данных передает все текстовые данные, вставленные на панель элементов и перетаскиваемые в форму, в пользовательскую ToolboxItem , создающую TextBox объект , содержащий текст.

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Drawing.Design;
using System.Security.Permissions;
using System.Windows.Forms;

namespace TextDataTextBoxComponent
{
    // Component that adds a "Text" data format ToolboxItemCreatorCallback 
    // to the Toolbox. This component uses a custom ToolboxItem that 
    // creates a TextBox containing the text data.
    public class TextDataTextBoxComponent : Component
    {
        private bool creatorAdded = false;
        private IToolboxService ts;

        public TextDataTextBoxComponent()
        {                     
        }

        // ISite override to register TextBox creator
        public override System.ComponentModel.ISite Site
        {
            get
            {
                return base.Site;
            }
            set
            {
                if( value != null )
                {                    
                    base.Site = value;

                    if (!creatorAdded)
                    {
                        AddTextTextBoxCreator();
                    }
                }
                else
                {
                    if (creatorAdded)
                    {
                        RemoveTextTextBoxCreator();
                    }

                    base.Site = value;             
                }
            }
        }

        // Adds a "Text" data format creator to the toolbox that creates 
        // a textbox from a text fragment pasted to the toolbox.
        private void AddTextTextBoxCreator()
        {
            ts = (IToolboxService)GetService(typeof(IToolboxService));

            if (ts != null) 
            {
                ToolboxItemCreatorCallback textCreator = 
                    new ToolboxItemCreatorCallback(this.CreateTextBoxForText);

                try
                {
                    ts.AddCreator(
                        textCreator, 
                        "Text", 
                        (IDesignerHost)GetService(typeof(IDesignerHost)));

                    creatorAdded = true;
                }
                catch(Exception ex)
                {
                    MessageBox.Show(
                        ex.ToString(), 
                        "Exception Information");
                }                
            }
        }

        // Removes any "Text" data format creator from the toolbox.
        private void RemoveTextTextBoxCreator()
        {
            if (ts != null)             
            {
                ts.RemoveCreator(
                    "Text", 
                    (IDesignerHost)GetService(typeof(IDesignerHost)));            

                creatorAdded = false;
            }
        }

        // ToolboxItemCreatorCallback delegate format method to create 
        // the toolbox item.
        private ToolboxItem CreateTextBoxForText(
            object serializedObject, 
            string format)
        {
            DataObject o = new DataObject((IDataObject)serializedObject);

            string[] formats = o.GetFormats();

            if (o.GetDataPresent("System.String", true))
            {
                string toolboxText = (string)(o.GetData("System.String", true));
                return (new TextToolboxItem(toolboxText));
            }

            return null;
        }

        protected override void Dispose(bool disposing)
        {
            if (creatorAdded)
            {
                RemoveTextTextBoxCreator();
            }
        }        
    }

    // Custom toolbox item creates a TextBox and sets its Text property
    // to the constructor-specified text.
    public class TextToolboxItem : ToolboxItem
    {
        private string text;
        private delegate void SetTextMethodHandler(Control c, string text);

        public TextToolboxItem(string text) : base()
        {
            this.text = text;
        }

        // ToolboxItem.CreateComponentsCore override to create the TextBox 
        // and link a method to set its Text property.
        protected override IComponent[] CreateComponentsCore(IDesignerHost host)
        {
            System.Windows.Forms.TextBox textbox = 
                (TextBox)host.CreateComponent(typeof(TextBox));
                
            // Because the designer resets the text of the textbox, use 
            // a SetTextMethodHandler to set the text to the value of 
            // the text data.
            Control c = host.RootComponent as Control;
            c.BeginInvoke(
                new SetTextMethodHandler(OnSetText), 
                new object[] {textbox, text});
           
            return new System.ComponentModel.IComponent[] { textbox };
        }        

        // Method to set the text property of a TextBox after it is initialized.
        private void OnSetText(Control c, string text) 
        {
            c.Text = text;
        }
    }
}

В следующем примере кода показано использование класса в ToolboxItem качестве базового класса для реализации пользовательского элемента панели элементов.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
using System.Data;
using System.Runtime.Serialization;
using System.Text;
using System.Windows.Forms;

namespace CustomToolboxItem
{
    public class Form1 : Form
    {
        private System.ComponentModel.IContainer components = null;
        private UserControl1 userControl11;
        private System.Windows.Forms.Label label1;

        public Form1()
        {
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.userControl11 = new CustomToolboxItem.UserControl1();
            this.SuspendLayout();
            // 
            // label1
            // 
            this.label1.Location = new System.Drawing.Point(15, 16);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(265, 62);
            this.label1.TabIndex = 0;
            this.label1.Text = "Build the project and drop UserControl1 from the toolbox onto the form.";
            // 
            // userControl11
            // 
            this.userControl11.LabelText = "This is a custom user control.  The text you see here is provided by a custom too" +
                "lbox item when the user control is dropped on the form.";
            this.userControl11.Location = new System.Drawing.Point(74, 81);
            this.userControl11.Name = "userControl11";
            this.userControl11.Padding = new System.Windows.Forms.Padding(6);
            this.userControl11.Size = new System.Drawing.Size(150, 150);
            this.userControl11.TabIndex = 1;
            // 
            // Form1
            // 
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.userControl11);
            this.Controls.Add(this.label1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
    }

    // Configure this user control to have a custom toolbox item.
    [ToolboxItem(typeof(MyToolboxItem))]
    public class UserControl1 : UserControl
    {
        private System.ComponentModel.IContainer components = null;
        private System.Windows.Forms.Label label1;

        public UserControl1()
        {
            InitializeComponent();
        }

        public string LabelText
        {
            get
            {
                return label1.Text;
            }
            set
            {
                label1.Text = value;
            }
        }

        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // label1
            // 
            this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.label1.Location = new System.Drawing.Point(6, 6);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(138, 138);
            this.label1.TabIndex = 0;
            this.label1.Text = "This is a custom user control.  " + 
                "The text you see here is provided by a custom toolbox" +
                " item when the user control is dropped on the form.\r\n";
            this.label1.TextAlign = 
                System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // UserControl1
            // 
            this.Controls.Add(this.label1);
            this.Name = "UserControl1";
            this.Padding = new System.Windows.Forms.Padding(6);
            this.ResumeLayout(false);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
    }

    // Toolbox items must be serializable.
    [Serializable]
    class MyToolboxItem : ToolboxItem
    {
        // The add components dialog in Visual Studio looks for a public
        // constructor that takes a type.
        public MyToolboxItem(Type toolType)
            : base(toolType)
        {
        }

        // And you must provide this special constructor for serialization.
        // If you add additional data to MyToolboxItem that you
        // want to serialize, you may override Deserialize and
        // Serialize methods to add that data.  
        MyToolboxItem(SerializationInfo info, StreamingContext context)
        {
            Deserialize(info, context);
        }

        // Let's override the creation code and pop up a dialog.
        protected override IComponent[] CreateComponentsCore(
            System.ComponentModel.Design.IDesignerHost host, 
            System.Collections.IDictionary defaultValues)
        {
            // Get the string we want to fill in the custom
            // user control.  If the user cancels out of the dialog,
            // return null or an empty array to signify that the 
            // tool creation was canceled.
            using (ToolboxItemDialog d = new ToolboxItemDialog())
            {
                if (d.ShowDialog() == DialogResult.OK)
                {
                    string text = d.CreationText;

                    IComponent[] comps =
                        base.CreateComponentsCore(host, defaultValues);
                    // comps will have a single component: our data type.
                    ((UserControl1)comps[0]).LabelText = text;
                    return comps;
                }
                else
                {
                    return null;
                }
            }
        }
    }

    public class ToolboxItemDialog : Form
    {
        private System.ComponentModel.IContainer components = null;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;

        public ToolboxItemDialog()
        {
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // label1
            // 
            this.label1.Location = new System.Drawing.Point(10, 9);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(273, 43);
            this.label1.TabIndex = 0;
            this.label1.Text = "Enter the text you would like" + 
                " to have the user control populated with:";
            // 
            // textBox1
            // 
            this.textBox1.AutoSize = false;
            this.textBox1.Location = new System.Drawing.Point(10, 58);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(270, 67);
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "This is a custom user control.  " + 
                "The text you see here is provided by a custom toolbox" +
                " item when the user control is dropped on the form.";
            // 
            // button1
            // 
            this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.button1.Location = new System.Drawing.Point(124, 131);
            this.button1.Name = "button1";
            this.button1.TabIndex = 2;
            this.button1.Text = "OK";
            // 
            // button2
            // 
            this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.button2.Location = new System.Drawing.Point(205, 131);
            this.button2.Name = "button2";
            this.button2.TabIndex = 3;
            this.button2.Text = "Cancel";
            // 
            // ToolboxItemDialog
            // 
            this.AcceptButton = this.button1;
            this.CancelButton = this.button2;
            this.ClientSize = new System.Drawing.Size(292, 162);
            this.ControlBox = false;
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.label1);
            this.FormBorderStyle = 
                System.Windows.Forms.FormBorderStyle.FixedDialog;
            this.Name = "ToolboxItemDialog";
            this.Text = "ToolboxItemDialog";
            this.ResumeLayout(false);
        }

        public string CreationText
        {
            get
            {
                return textBox1.Text;
            }
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}

Комментарии

ToolboxItem — это базовый класс для элементов панели элементов, которые могут отображаться на панели элементов среды разработки. Элемент панели элементов обычно представляет компонент, который необходимо создать при вызове в документе в режиме разработки. Класс ToolboxItem предоставляет методы и свойства, необходимые для предоставления панели элементов свойств отображения для элемента панели элементов, для создания компонента или компонентов при использовании, а также для сериализации и десериализации себя для сохранения в базе данных панели элементов.

Экземпляр ToolboxItem класса можно настроить с именем, растровым изображением и типом для создания, не создавая класс, производный от ToolboxItem. Класс ToolboxItem также предоставляет базовый класс для реализации пользовательских элементов панели элементов. Пользователь ToolboxItem может создавать несколько компонентов. Чтобы реализовать пользовательский элемент панели элементов, необходимо наследовать ToolboxItem и переопределить CreateComponentsCoreметоды , Serializeи Deserialize .

Для правильной ToolboxItem работы необходимо настроить следующие свойства и методы:

  • Свойство DisplayName задает метку для элемента панели элементов при отображении на панели элементов.

  • Свойство TypeName задает полное имя типа компонента, создаваемого элементом. Если производный класс создает несколько компонентов, TypeName свойство может использоваться или не использоваться в зависимости от того, зависит ли CreateComponentsCore переопределение метода от значения этого свойства.

  • Свойство AssemblyName задает сборку, содержащую тип компонента, создаваемого элементом.

  • Свойство Bitmap при необходимости задает растровое изображение, которое будет отображаться рядом с отображаемым именем элемента панели элементов на панели элементов.

  • Свойство Filter при необходимости содержит все ToolboxItemFilterAttribute объекты, определяющие, можно ли использовать элемент панели элементов в определенном компоненте.

  • Метод CreateComponentsCore возвращает экземпляр компонента или экземпляры для вставки там, где используется это средство.

  • Метод Serialize сохраняет элемент панели элементов в указанном SerializationInfoобъекте .

  • Метод Deserialize настраивает элемент панели элементов на основе сведений о состоянии, содержащихся в указанном SerializationInfoобъекте .

  • Метод Initialize настраивает элемент панели элементов для создания указанного типа компонента, если CreateComponentsCore метод не был переопределен, чтобы вести себя по-другому.

  • Свойство Locked указывает, можно ли изменить свойства элемента панели элементов. Элемент панели элементов обычно блокируется после добавления на панель элементов.

  • Метод Lock блокирует элемент панели элементов.

  • Метод CheckUnlocked создает исключение, если Locked свойство имеет значение true.

Конструкторы

ToolboxItem()

Инициализирует новый экземпляр класса ToolboxItem.

ToolboxItem(Type)

Инициализирует новый экземпляр класса ToolboxItem, который создает определенный тип компонента.

Свойства

AssemblyName

Получает или задает имя сборки, содержащей тип или типы, созданные элементом панели инструментов.

Bitmap

Получает или задает растровое изображение для представления элемента панели инструментов на панели.

Company

Получает или задает имя компании для данного объекта ToolboxItem.

ComponentType

Возвращает тип компонента для данного объекта ToolboxItem.

DependentAssemblies

Получает или устанавливает объект AssemblyName для элемента панели инструментов.

Description

Получает или задает описание для этого компонента ToolboxItem.

DisplayName

Получает или задает изображаемое имя для элемента панели инструментов.

Filter

Получает или задает фильтр, определяющий, может ли элемент панели инструментов быть использован для конечного компонента.

IsTransient

Возвращает значение, определяющее, является ли данный элемент панели инструментов переходным.

Locked

Возвращает значение, определяющее, заблокирован ли элемент ToolboxItem в текущий момент.

OriginalBitmap

Возвращает или задает исходное растровое изображение, которое будет использоваться на панели инструментов для этого элемента.

Properties

Возвращает словарь свойств.

TypeName

Получает или задает полное имя типа IComponent, который создает при вызове элемент панели инструментов.

Version

Возвращает версию для этого объекта ToolboxItem.

Методы

CheckUnlocked()

Выдает исключение, если элемент панели инструментов заблокирован в данный момент.

CreateComponents()

Создает компоненты, для создания которых был сконфигурирован элемент панели инструментов.

CreateComponents(IDesignerHost)

Создает компоненты, для создания которых был сконфигурирован элемент панели инструментов, используя указанный узел конструктора.

CreateComponents(IDesignerHost, IDictionary)

Создает компоненты, для создания которых был сконфигурирован элемент панели инструментов с использованием указанного узла конструктора и значений по умолчанию.

CreateComponentsCore(IDesignerHost)

Создает компонент или массив компонентов при вызове элемента панели инструментов.

CreateComponentsCore(IDesignerHost, IDictionary)

Создает массив компонентов при вызове элемента панели инструментов.

Deserialize(SerializationInfo, StreamingContext)

Загружает статус элемента панели элементов из указанного объекта сведений сериализации.

Equals(Object)

Определяет, равны ли два экземпляра ToolboxItem.

FilterPropertyValue(String, Object)

Выполняет фильтрацию значения свойства перед его возвращением.

GetHashCode()

Возвращает хэш-код данного экземпляра.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetType(IDesignerHost)

Включает доступ к типу, который сопоставлен данному элементу панели инструментов.

GetType(IDesignerHost, AssemblyName, String, Boolean)

Создает экземпляр указанного типа, при необходимости используя заданные узел конструктора и имя сборки.

Initialize(Type)

Инициализирует текущий элемент панели инструментов создаваемого типа.

Lock()

Блокирует элемент панели инструментов и предотвращает изменение его свойств.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnComponentsCreated(ToolboxComponentsCreatedEventArgs)

Вызывает событие ComponentsCreated.

OnComponentsCreating(ToolboxComponentsCreatingEventArgs)

Вызывает событие ComponentsCreating.

Serialize(SerializationInfo, StreamingContext)

Сохраняет состояние элемента панели элементов в указанный объект данных сериализации.

ToString()

Возвращает значение типа String, представляющее текущий объект ToolboxItem.

ValidatePropertyType(String, Object, Type, Boolean)

Проверяет соответствие объекта заданному типу.

ValidatePropertyValue(String, Object)

Проверяет свойство перед его присваиванием словарю свойств.

События

ComponentsCreated

Происходит непосредственно после создания компонентов.

ComponentsCreating

Происходит непосредственно перед созданием компонентов.

Явные реализации интерфейса

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Описание этого элемента содержится в методе GetObjectData(SerializationInfo, StreamingContext).

Применяется к

См. также раздел