2016-04-21 3 views
0

У меня есть кнопка с определенным стилем, который я повторно использую в нескольких пользовательских элементах управления моим проектом. Всякий раз, когда я хочу изменить визуальный стиль этой кнопки, я должен повторять изменения свойств везде, где он используется, что является болью.C# Forms - Пользовательская кнопка

Я хотел бы «расширить» элемент управления Button по умолчанию, чтобы я мог повторно использовать его во время разработки в дизайнере без необходимости менять его стиль повсюду. Я хочу, чтобы мой ExtendedButton был выбран из панели инструментов.

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

Я попытался CDO следующего, но дизайнер не будет ничего показывать и говорит: «Для того, чтобы добавить компоненты в ваш класс, перетащите их из панели ...»

using System.ComponentModel; 
using System.Windows.Forms; 

namespace TestForm 
{ 
    [Designer(typeof(Button))] 
    public partial class ExtendedButton : Button 
    { 
     public ExtendedButton() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnPaint(PaintEventArgs pe) 
     { 
      base.OnPaint(pe); 
     } 
    } 
} 

Как я могу добиться этого пожалуйста ? Спасибо.

ответ

0

Ну, я получил его на работу.

Мне нужно удалить [Designer (typeof (Button))], который я добавил, и вызвать базовый конструктор, который не был вызван по умолчанию при создании нового файла UserControl.

public partial class ExtendedButton : Button 
{ 
    public ExtendedButton() : base() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnPaint(PaintEventArgs pe) 
    { 
     base.OnPaint(pe); 
    } 
} 
0

Чтобы сделать турникет глобальным для всех расширенных кнопок, которые можно использовать статические переменные:

class ExtendedButton : Button 
{ 
    public enum ExtendedStyle 
    { 
     Red, 
     Blue 
    } 

    private static ExtendedStyle style; 
    public ExtendedStyle Style 
    { 
     get { return style; } 
     set { style = value; } 
    } 

    protected override void OnPaint(PaintEventArgs pe) 
    { 
     base.OnPaint(pe); 

     if (style == ExtendedStyle.Red) 
      pe.Graphics.DrawRectangle(Pens.Red, 0, 0, Width - 1, Height - 1); 
     else 
      pe.Graphics.DrawRectangle(Pens.Blue, 0, 0, Width - 1, Height - 1); 
    } 
} 

Если изменить стиль в конструкторе всех кнопки изменят свой стиль