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

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


IToolboxService Интерфейс

Определение

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

[System.Runtime.InteropServices.Guid("4BACD258-DE64-4048-BC4E-FEDBEF9ACB76")]
[System.Runtime.InteropServices.InterfaceType(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIUnknown)]
public interface IToolboxService
Производный
Атрибуты

Примеры

В следующем примере кода показано использование в режиме конструктора IToolboxService для перечисления и выбора категорий и элементов панели элементов, а также для создания компонентов или элементов управления из элементов панели элементов и добавления их в Form. Чтобы использовать пример, скомпилируйте код в сборку и добавьте ссылку на сборку в Windows Forms приложении. Если вы используете Visual Studio, IToolboxServiceControl объект автоматически добавляется на панель элементов. Create экземпляр в IToolboxServiceControl форме, чтобы проверить его поведение.

using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Drawing.Design;
using System.Data;
using System.Diagnostics;
using System.Windows.Forms;

namespace IToolboxServiceExample
{	
    // Provides an example control that functions in design mode to 
    // demonstrate use of the IToolboxService to list and select toolbox 
    // categories and items, and to add components or controls 
    // to the parent form using code.
    [DesignerAttribute(typeof(WindowMessageDesigner), typeof(IDesigner))]
    public class IToolboxServiceControl : System.Windows.Forms.UserControl
    {		
        private System.Windows.Forms.ListBox listBox1;
        private System.Windows.Forms.ListBox listBox2;
        private IToolboxService toolboxService = null;
        private ToolboxItemCollection tools;
        private int controlSpacingMultiplier;

        public IToolboxServiceControl()
        {
            InitializeComponent();
            listBox2.DoubleClick += new EventHandler(this.CreateComponent);
            controlSpacingMultiplier = 0;
        }
        
        // Obtain or reset IToolboxService reference on each siting of control.
        public override System.ComponentModel.ISite Site
        {
            get
            {
                return base.Site;
            }
            set
            {     
                base.Site = value;

                // If the component was sited, attempt to obtain 
                // an IToolboxService instance.
                if( base.Site != null )
                {
                    toolboxService = (IToolboxService)this.GetService(typeof(IToolboxService));
                    // If an IToolboxService was located, update the 
                    // category list.
                    if( toolboxService != null )
                        UpdateLists();                    
                }
                else
                {
                    toolboxService = null;
                }
            }
        }

        // Updates the list of categories and the list of items in the 
        // selected category.
        private void UpdateLists()
        {
            if( toolboxService != null )
            {
                this.listBox1.SelectedIndexChanged -= new System.EventHandler(this.UpdateSelectedCategory);
                this.listBox2.SelectedIndexChanged -= new System.EventHandler(this.UpdateSelectedItem);
                listBox1.Items.Clear();
                for( int i=0; i<toolboxService.CategoryNames.Count; i++ )
                {
                    listBox1.Items.Add( toolboxService.CategoryNames[i] );
                    if( toolboxService.CategoryNames[i] == toolboxService.SelectedCategory )
                    {
                        listBox1.SelectedIndex = i;                        
                        tools = toolboxService.GetToolboxItems( toolboxService.SelectedCategory );
                        listBox2.Items.Clear();
                        for( int j=0; j<tools.Count; j++ )
                            listBox2.Items.Add( tools[j].DisplayName );
                    }
                }
                this.listBox1.SelectedIndexChanged += new System.EventHandler(this.UpdateSelectedCategory);
                this.listBox2.SelectedIndexChanged += new System.EventHandler(this.UpdateSelectedItem);
            }
        }

        // Sets the selected category when a category is clicked in the 
        // category list.
        private void UpdateSelectedCategory(object sender, System.EventArgs e)
        {
            if( toolboxService != null )
            {
                toolboxService.SelectedCategory = (string)listBox1.SelectedItem;
                UpdateLists();
            }
        }

        // Sets the selected item when an item is clicked in the item list.
        private void UpdateSelectedItem(object sender, System.EventArgs e)
        {
            if( toolboxService != null )      
            {
                if( listBox1.SelectedIndex != -1 )
                {
                    if( (string)listBox1.SelectedItem == toolboxService.SelectedCategory )
                        toolboxService.SetSelectedToolboxItem(tools[listBox2.SelectedIndex]);  
                    else
                        UpdateLists();
                }
            }            
        }   

        // Creates a control from a double-clicked toolbox item and adds 
        // it to the parent form.
        private void CreateComponent(object sender, EventArgs e)
        {
            // Obtains an IDesignerHost service from design environment.
            IDesignerHost host = (IDesignerHost)this.GetService(typeof(IDesignerHost));

            // Get the project components container (Windows Forms control 
            // containment depends on controls collections).
            IContainer container = host.Container;
                        
            // Identifies the parent Form.
            System.Windows.Forms.Form parentForm = this.FindForm();

            // Retrieves the parent Form's designer host.
            IDesignerHost parentHost = (IDesignerHost)parentForm.Site.GetService(typeof(IDesignerHost));

            // Create the components.
            IComponent[] comps = null;
            try
            {
                 comps = toolboxService.GetSelectedToolboxItem().CreateComponents(parentHost);
            }
            catch(Exception ex)
            {
                // Catch and show any exceptions to prevent disabling 
                // the control's UI.
                MessageBox.Show(ex.ToString(), "Exception message");
            }
            if( comps == null )
                return;

            // Add any created controls to the parent form's controls 
            // collection. Note: components are added from the 
            // ToolboxItem.CreateComponents(IDesignerHost) method.
            for( int i=0; i<comps.Length; i++ )            
            {
                if( parentForm!= null && comps[i].GetType().IsSubclassOf(typeof(System.Windows.Forms.Control)) )
                {                    
                    ((System.Windows.Forms.Control)comps[i]).Location = new Point(20*controlSpacingMultiplier, 20*controlSpacingMultiplier);
                    if( controlSpacingMultiplier > 10 )
                        controlSpacingMultiplier = 0;
                    else
                        controlSpacingMultiplier++;
                    parentForm.Controls.Add( (System.Windows.Forms.Control)comps[i] );
                }
            }
        }

        // Displays labels.
        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            e.Graphics.DrawString("IToolboxService Control", new Font("Arial", 14), new SolidBrush(Color.Black), 6, 4);
            e.Graphics.DrawString("Category List", new Font("Arial", 8), new SolidBrush(Color.Black), 8, 26);
            e.Graphics.DrawString("Items in Category", new Font("Arial", 8), new SolidBrush(Color.Black), 208, 26);
            e.Graphics.DrawString("(Double-click item to add to parent form)", new Font("Arial", 7), new SolidBrush(Color.Black), 232, 12);
        }  

        private void InitializeComponent()
        {
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.listBox2 = new System.Windows.Forms.ListBox();
            this.SuspendLayout();
            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left);
            this.listBox1.Location = new System.Drawing.Point(8, 41);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(192, 368);
            this.listBox1.TabIndex = 0;
            this.listBox1.SelectedIndexChanged += new System.EventHandler(this.UpdateSelectedCategory);
            this.listBox2.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.listBox2.Location = new System.Drawing.Point(208, 41);
            this.listBox2.Name = "listBox2";
            this.listBox2.Size = new System.Drawing.Size(228, 368);
            this.listBox2.TabIndex = 3;
            this.BackColor = System.Drawing.Color.Beige;
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                          this.listBox2,
                                                                          this.listBox1});
            this.Location = new System.Drawing.Point(500, 400);
            this.Name = "IToolboxServiceControl";
            this.Size = new System.Drawing.Size(442, 422);
            this.ResumeLayout(false);
        }		
    }
    
    // This designer passes window messages to the controls at design time.    
    public class WindowMessageDesigner : System.Windows.Forms.Design.ControlDesigner
    {
        public WindowMessageDesigner()
        {
        }
        
        // Window procedure override passes events to control.
        protected override void WndProc(ref System.Windows.Forms.Message m)
        {   
            if( m.HWnd == this.Control.Handle )
                base.WndProc(ref m);            
            else            
                this.DefWndProc(ref m);            
        }        
    }
}

В следующем примере кода предоставляется компонент , который использует 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;
        }
    }
}

Комментарии

Интерфейс IToolboxService предоставляет свойства и методы для добавления и удаления элементов панели элементов и делегатов обратного вызова создателя панели элементов, сериализации и десериализации элементов панели элементов, а также получения сведений о состоянии панели элементов и управления состоянием панели элементов.

Вы можете получить сведения о содержимом панели элементов с помощью следующих методов:

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

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

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

  • Метод GetSelectedToolboxItem извлекает текущий выбранный ToolboxItemобъект .

  • Метод SetSelectedToolboxItem выбирает указанный ToolboxItem в качестве текущего элемента панели элементов.

  • Метод IsSupported указывает, поддерживается ли указанный сериализованный объект ( если это ToolboxItem) указанным узлом конструктора или соответствует ли он указанным атрибутам.

  • Метод IsToolboxItem указывает, является ли указанный сериализованный объект объектом ToolboxItem.

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

  • Метод AddToolboxItem добавляет на ToolboxItem панель элементов , создавая при необходимости указанную категорию, если она не существует.

  • Метод AddLinkedToolboxItem добавляет объект , ToolboxItem который включен только для текущего проекта, на панель элементов.

  • Метод RemoveToolboxItem удаляет указанный ToolboxItemобъект .

  • Метод AddCreator добавляет делегат, ToolboxItemCreatorCallback способный преобразовать некоторые типы данных, хранящихся на панели элементов, в ToolboxItem.

  • Метод RemoveCreator удаляет все ToolboxItemCreatorCallback делегаты для указанного типа данных.

Вы можете обновить панель элементов, пометить элемент панели элементов как используемый или установить курсор мыши на курсор, представляющий текущий элемент панели элементов, с помощью следующих методов:

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

  • Метод SelectedToolboxItemUsed сообщает панели элементов о том, что выбранный элемент панели элементов был использован.

  • Метод SetCursor задает курсор мыши, представляющий текущий элемент панели элементов.

Вы можете использовать панель элементов для сериализации или десериализации элемента панели элементов с помощью следующих методов:

  • Метод DeserializeToolboxItem пытается вернуть ToolboxItem из указанного сериализованного объекта элемента панели элементов.

  • Метод SerializeToolboxItem возвращает сериализованный объект , представляющий указанный ToolboxItemобъект .

Свойства

CategoryNames

Получает имена всех категорий средств имеющихся в данный момент на панели инструментов.

SelectedCategory

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

Методы

AddCreator(ToolboxItemCreatorCallback, String)

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

AddCreator(ToolboxItemCreatorCallback, String, IDesignerHost)

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

AddLinkedToolboxItem(ToolboxItem, IDesignerHost)

Добавляет заданный связанный с проектом элемент на панель инструментов.

AddLinkedToolboxItem(ToolboxItem, String, IDesignerHost)

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

AddToolboxItem(ToolboxItem)

Добавляет заданный элемент панели инструментов на панель инструментов.

AddToolboxItem(ToolboxItem, String)

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

DeserializeToolboxItem(Object)

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

DeserializeToolboxItem(Object, IDesignerHost)

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

GetSelectedToolboxItem()

Получает выбранный в данный момент элемент панели инструментов.

GetSelectedToolboxItem(IDesignerHost)

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

GetToolboxItems()

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

GetToolboxItems(IDesignerHost)

Получает коллекцию элементов панели элементов, связанных с указанным узлом конструктора из панели элементов.

GetToolboxItems(String)

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

GetToolboxItems(String, IDesignerHost)

Получает из панели инструментов коллекцию элементов панели инструментов, которые сопоставлены указанным хост-узлу конструктора и категории.

IsSupported(Object, ICollection)

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

IsSupported(Object, IDesignerHost)

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

IsToolboxItem(Object)

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

IsToolboxItem(Object, IDesignerHost)

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

Refresh()

Обновляет состояние элементов панели инструментов.

RemoveCreator(String)

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

RemoveCreator(String, IDesignerHost)

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

RemoveToolboxItem(ToolboxItem)

Удаляет заданный элемент панели инструментов из панели инструментов.

RemoveToolboxItem(ToolboxItem, String)

Удаляет заданный элемент панели инструментов из панели инструментов.

SelectedToolboxItemUsed()

Уведомляет службу панели инструментов, что выбранное средство было использовано.

SerializeToolboxItem(ToolboxItem)

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

SetCursor()

Устанавливает для курсора текущего приложения курсор, представляющий текущее выбранное средство.

SetSelectedToolboxItem(ToolboxItem)

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

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