WinForms ToolStrip недоступен в визуальном наследовании - PullRequest
3 голосов
/ 14 июля 2011

Допустим, у меня есть FormChild, наследующий FormParent. У родителя есть всплывающая подсказка вверху. В моей дочерней форме я хочу добавить дополнительные элементы, но элемент управления всегда заблокирован, хотя я установил для модификаторов значение protected .

.

Я проверил интернет, похоже, это известная ошибка; но кто-нибудь знает обходной путь или что-то?

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Ну, вы можете вручную редактировать файл FormChild.Designer.cs.Там вы можете получить доступ к унаследованной панели инструментов.

Редактировать:

  1. Добавить этот класс:

    //System.Design.dll required
    [Designer(typeof(System.Windows.Forms.Design.ControlDesigner))]
    public class InheritableToolStrip : ToolStrip { }
    
  2. Скомпилировать проект

  3. Используйте InheritableToolStrip из панели инструментов для добавления в FormParent.
  4. Измените свойство модификатора на защищенное.
  5. Добавьте элементы в унаследованную инструментальную полосу в FormChild.

и вы должны быть в состоянии проектировать контроль в конструкторе.Попробовал немного - похоже, работает.

Ps Iam с использованием VS2010, .NET v4

0 голосов
/ 21 мая 2012

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

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

Я разработал элементы управления MergableToolStrip, которые можно бесплатно использовать здесь

0 голосов
/ 14 июля 2011

Вы можете передать toolstrip в дочернюю форму следующим образом.

public partial class ChildForm : Form
{ 
    private readonly ToolStrip parentToolStrip;

    public ChildForm(ToolStrip strip)
    {
        parentToolStrip = strip;
    }
}

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

...