Редактировать DataGridView через конструктор в унаследованном UserControl

Я создал UserControl с помощью кнопки, TextBox и DataGridView. Я установил модификаторы всех элементов управления как public.

Теперь, если я унаследовал от этого UserControl, я могу изменить TextBox и кнопку через конструктор (перемещаться, изменять свойства), как я и ожидал. Но для DataGridView все свойства отключены.

Есть ли причина, по которой я не могу изменить DataGridView через конструктор в унаследованном UserControl?


person Jürgen Steinblock    schedule 12.11.2010    source источник
comment
Действительно, это странно. Глядя на созданный дизайнером код за родительским пользовательским элементом управления, я не вижу ничего, что блокирует сетку. Тем не менее, когда я наследую от него и использую визуальный редактор, элемент управления отображается с небольшой блокировкой вверху, что указывает на то, что что-то заблокировало элемент управления. Однако я не вижу причин для его блокировки, хотя что-то должно это делать. Похоже на вопрос к разработчику элемента управления DataGridView.   -  person David T. Macknet    schedule 12.11.2010
comment
исправил это. Посмотри на мое решение   -  person Jürgen Steinblock    schedule 12.11.2010


Ответы (1)


Нашел решение здесь: http://adamhouldsworth.blogspot.com/2010/02/winforms-visual-inheritance-limitations.html

Короче:

  1. Добавьте ссылку на System.Design
  2. Наследуйте от DataGridView с помощью этого кода:

    [Designer(typeof(ControlDesigner))]
    public class InheritableDataGridView : DataGridView
    {
        public InheritableDataGridView()
            : base()
        { }
    }
    
  3. ???
  4. Выгода!!!
person Jürgen Steinblock    schedule 12.11.2010
comment
Одно замечание: по крайней мере, в моем конкретном случае (я использую VS2008) небольшая блокировка в углу элемента управления все еще появляется, однако свойства в конструкторе доступны для редактирования. Сначала это смутило меня, так как я думал, что решение не работает. Спасибо! - person Ken; 09.09.2011