2013-11-27 4 views
4

Если вы добавите TableLayoutPanel в форму, добавьте элемент управления в одну из его ячеек, добавленный элемент управления имеет дополнительные свойства в окне свойств (например: Row, RowSpan, Column, ColumnSpan, Cell и т. Д.).Можете ли вы добавить пользовательские свойства к дочерним элементам управления пользовательского элемента управления?

Мой вопрос в том, что если вы создаете свой собственный элемент управления/компонент, есть ли способ добавить свойства к любому существующему элементу управления, который станет дочерним элементом вашего настраиваемого элемента управления, например, поведение TableLayoutPanel?

+2

Да - те, которые называются ExtenderProviders. Хорошие примеры - компоненты ErrorProvider и ToolTip. Вы также можете создать эту возможность самостоятельно. Обычно они работают над добавлением свойств определенным элементам управления Типы против дочерних элементов управления. (Хороший вопрос о том, как этот элемент управления добавляет свойства только один раз, когда-то становится его потомком ... Мне нужно подумать об этом). Он может быть добавлен к соответствующим элементам управления, но не отображается/активно, пока не станет дочерним элементом управления. – Plutonix

+0

Прохладный, это что-то новое для меня, чтобы исследовать и учиться. Спасибо @Plutonix – Alex

ответ

0

Я предполагаю, что вы ищете ProvideProperty атрибут

http://msdn.microsoft.com/en-us/library/d6c1xa43.aspx

В следующем коде у видеть, как его использовали в TableLayoutPanel

[ProvideProperty("ColumnSpan", typeof(Control))] 
[ProvideProperty("RowSpan", typeof(Control))] 
[ProvideProperty("Row", typeof(Control))] 
[ProvideProperty("Column", typeof(Control))] 
[ProvideProperty("CellPosition", typeof(Control))] 
[DefaultProperty("ColumnCount")] 
[DesignerSerializer("System.Windows.Forms.Design.TableLayoutPanelCodeDomSerializer, " + AssemblyRef.SystemDesign, "System.ComponentModel.Design.Serialization.CodeDomSerializer, " + AssemblyRef.SystemDesign)] 
[Docking(DockingBehavior.Never)] 
[Designer("System.Windows.Forms.Design.TableLayoutPanelDesigner, " + AssemblyRef.SystemDesign)] 
[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.AutoDispatch)] 
[SRDescription(SR.DescriptionTableLayoutPanel)] 
public class TableLayoutPanel : Panel, IExtenderProvider { 
Смежные вопросы