2016-02-09 4 views
1

Если у меня есть пользовательский элемент управления, в котором я переопределяю OnPaint() для отображения пользовательской графики. Почему это не отображается при просмотре элемента управления в режиме дизайна визуальной студии?Как получить настраиваемые пользовательские элементы управления для отображения в режиме разработки?

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

public partial class MyUserControl : UserControl 
{ 
    public MyUserControl() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     e.Graphics.Clear(Color.Black); 

     base.OnPaint(e); 
    } 
} 

Есть ли что-нибудь, что я могу сделать, чтобы это отображалось при просмотре элемента управления в режиме разработки?

+1

Не уверен, что делать, но это то же самое, что и с формой: его событие Paint также не будет использоваться дизайнером. [Это может помочь ..] (http://www.codeproject.com/ Статьи/13531/Targeting-Design-Time-Events-of-User-Controls) – TaW

+3

Во время разработки дизайнер создает базовый класс класса, который вы проектируете. UserControl.OnPaintBackground() рисует BackColor и UserControl.OnPaint() ничего не рисует. Когда вы отбрасываете UserControl в форме, он больше не находится в режиме разработки, и вы можете увидеть, что ваш метод OnPaint(). Вы можете получить другой пользовательский элемент управления от этого, и вы увидите черный во время разработки. –

+0

Вау, это хорошо знать и довольно простой способ «решить» проблему. – TaW

ответ

0

Если вы строите проект, элемент управления должен появиться в панели инструментов конструктора форм. Если вы перетащите его в форму, он станет черным, как предполагалось.

Насколько я знаю, это невозможно в Designtime самого элемента управления.

0

Пользовательские элементы управления пользователя не отображаются на дизайнере, если вы включили режим «издевки». В зависимости от вашей версии Visual Studio будет либо кнопка рядом с дизайнером, либо опция в «Инструменты»> «Параметры», и вы захотите «Включить код проекта».

0

Это предназначенное поведение, как вы его описываете.

Ваш унаследованный элемент управления должен быть построен первым, чтобы выполнить переопределенный метод OnPaint().

После его создания он появится в панели инструментов Designer, где его можно добавить в форму. Форма в дизайнере содержит встроенный элемент управления, который выполняет OnPaint(), поэтому черный фон отображается, даже если вы все еще в режиме разработки.

Быстрый способ проиллюстрировать это - изменить Color.Black на другой цвет и посмотреть, что произойдет. Он не будет обновляться в Дизайнере, пока вы не восстановите решение!