Свойства дочернего элемента управления пользователя в окне свойств

У меня есть составной пользовательский элемент управления, содержащий DataGridView. Кроме того, для свойства DataGridView.Modifiers установлено значение Public .

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

Что мне делать? Большое спасибо.

2
nl ja de

3 ответы

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

Что-то вроде этого:

// your grid control instantiated somewhere:
DataGridVIew myInnerDataGridVIew = new ...

public DataGridVIew MyInnerDataGridVIew 
{ 
  get { return myInnerDataGridVIew; } 
  set { myInnerDataGridVIew = value; } 
}

Создав это свойство и перестроим, вы увидите элемент MyInnerDataGridVIew в окне свойств, когда в дизайнере выбран составной элемент управления, рядом с ним находится [+]. Нажав на плюс, вы увидите, что свойства DataGridVIew расширены.

3
добавлено

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

public DataGridView DataGrid { get { return this.dataGridView1; } }

Таким образом, пользователь вашего элемента управления может получить доступ ко всем свойствам сетки и переопределить все настройки по умолчанию, которые вы выбрали для него (например, цвет фона и т. Д.), Но они не могут заменить сетку с новым экземпляром, что может испортить некоторую внутреннюю логику вашего контроля.

2
добавлено
+1 Спасибо! Это было очень ценно, и я пойду туда.
добавлено автор user386167, источник

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

Просто предположим, что у вас есть 1 статическая сетка данных, которая называется dataGrid1. Теперь, чтобы сделать доступным снаружи (и видимым в окне свойств), вам нужно создать свойство, которое будет устанавливать и возвращать его.

public DataGridView ChildDataGridView
{
    get { return this.dataGrid1; }
    set { this.dataGrid1 = value; }
}

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

Вы можете изменить и получить доступ к нему из этого свойства.

Это будет работать только в том случае, если dataGrid1 существует все время и не генерируется динамически в коде.

1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot