2008-10-16 2 views
9

У меня есть UserControl с некоторыми предопределенными элементами управления (groupbox, button, datagridview), эти элементы управления отмечены как защищенные, а переменная компонентов также отмечена как защищенная.DataGridView заблокирован наследуемым UserControl

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

Я подозреваю, что это может иметь какое-то отношение к DataGridView, реализующему ISupportInitilize.

public class BaseGridDetail : UserControl 

Определен элемент управления DataGridView (и др.).


public class InheritedDetail : BaseGridDetail 

управления DataGridView заблокирован


Кто-нибудь есть идеи, как сделать этот элемент управления доступен в дизайнере после inheritenace?

ответ

10

По внешнему виду DataListView (и некоторые другие элементы управления) не поддерживают визуальное наследование. Существует проблема подключения logged here, которая не выглядит обнадеживающей.

Были обнаружены аналогичные проблемы с другими элементами управления формой, например. flowlayoutpanel.

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

Вот официальный ответ на connect: «Для данного выпуска, DataGridView не был предназначен для использования в визуальной intheritance Мы будем держать ваше предложение в виде, когда мы планируем наше будущее освобождение.» То есть 26/05/2006.

Обновление: найдено this blog post which may have the answer

Edit: я был не в состоянии проверить претензии дневник Post. Выбранный объект might be the latest on this issue

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

+0

Все еще есть в VS2010: http://stackoverflow.com/questions/15089289/cannot-visually-change-datagridview-in-inherited-form/15090076#15090076 Я также добавил некоторые дополнительные заметки о профилях .NET. – 2013-02-26 13:16:49

1

Я оставил ответ, но перечитал ваш вопрос и решил удалить его.

Что это о DataGridView, который вы пытаетесь изменить в унаследованном элементе управления? Это столбцы? Я был в состоянии сделать это путем создания защищенного метода в моей базовую UserControl и передавая коллекцию столбцов в сетке в в нее, как это:

// in base UserControl 
public BaseGridDetail() 
{ 
    InitializeComponent(); 

    InitGridColumns(dataGridView1.Columns); 
} 

protected virtual void InitGridColumns(DataGridViewColumnCollection columns) 
{ 
    columns.Clear(); 
} 

Теперь производное управление может просто переопределить этот метод, например, так:

// in InheritedDetail 
protected override void InitGridColumns(DataGridViewColumnCollection columns) 
{ 
    base.InitGridColumns(columns); 
    // add my own custom columns 
} 
+0

В конструкторе все элементы управления могут изменять любые свойства, кроме DataGridView. Он полностью закрыт с точки зрения дизайнера. – benPearce 2008-10-16 05:38:16

+0

Да, прочитав ответ Роба на ваш вопрос, я вспомнил, почему мне пришлось спуститься по пути «InitGridColumns» в моем собственном приложении. Визуальное наследование просто не работает с DataGridView. – 2008-10-16 21:33:57

5

[1] создать свой собственный UserControl

[2] сделать свой заказ UserControl использовать ниже наследуемых DataGridView:

[Designer(typeof System.Windows.Forms.Design.ControlDesigner))] 
public class InheritedDataGridView : DataGridView { } 

[3] Наследование вашего пользовательского UserControl, и альт !!

[4] Оу не забудьте добавить "System.Design" DLL

Enjoy.

3

Добавить datagrid в панель управления и установить модификаторы панели и datagrid для защиты. Это приведет к тому, что ваше унаследованное время проектирования формы получит доступ к свойствам сетки.

0

Измените свойство на [protected] на [protected], определенное в xx.designer.cs , который изначально сгенерирован машинным кодом.

, например

private System.Windows.Forms.Button btnSave; 

в

protected System.Windows.Forms.Button btnSave; 

и восстановить его.

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

Смежные вопросы