Как добавить пользовательское свойство в UserControl, которое отображается как поле со списком во время разработки

1

Изменить: вопрос заключается в добавлении свойства во время разработки, а не во время выполнения.

Я создал UserControl, в котором есть кнопка, и я хочу добавить новое свойство, которое, когда пользователь использует его в форме, может видеть свойство FillColor в пользовательской FillColor Property Tab. Что еще, это свойство должно быть в виде combobox, которое позволяет пользователю выбирать Color в System.Drawing.Color.

Например:

Я называю свой HalfFill. То, что он делает, это заполнить обычную кнопку от начала до половины его размера.

Теперь я хочу, чтобы 2 свойства были настроены с помощью Property Tab:

  • цвет первой половины
  • цвет второй половины

И когда пользователь выбирает цвет, варианты перечислены в combobox (ведет себя как свойство BackColor для обычных кнопок), и все они поступают из System.Drawing.Color.

Я хочу сделать это с Enum. Кто-нибудь может мне помочь? Как я поместил comboxBox со своими значениями в Properties Tab?

Вот пример, который я ищу

public partial class HalfButton: UserControl
{
    public ComboBox ChooseColor //of all color in System.Drawing.Color
    {
        /* must be in that comboBox all the color in Color library so the user could choose 
        from properies of the button the color he want */

        get { return x.Item[colorfill.ToString()); }
        set { colorfill = Color.FromName(value); OnPaint(null); }
    }

    private Color colorfill = Color.Tomato;

    ComboBox x;

    public HalfButton()
    {
        InitializeComponent();

        x = new ComboBox();
        ArrayList ColorList = new ArrayList();
        Type colorType = typeof(System.Drawing.Color);
        PropertyInfo[] propInfoList = colorType.GetProperties(BindingFlags.Static |
                                                              BindingFlags.DeclaredOnly |
                                                              BindingFlags.Public);
        foreach (PropertyInfo c in propInfoList)
        {
            x.Items.Add(c.Name);
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        MessageBox.Show(colorfill+""); 
    }
}
  • 0
    Если вы хотите добавить свойство в свой пользовательский элемент управления, вы должны добавить свойство в код пользовательского элемента управления. Лучше, если вы добавите несколько кодов к этому вопросу, на которые будет легко ответить.
  • 0
    у меня уже было, я просто не знаю, как сделать это как ComboBox / Enum со всеми цветами
Показать ещё 3 комментария
Теги:
winforms
user-controls

3 ответа

1
Лучший ответ

Вы имеете в виду свойство в Designer? Пожалуйста, взгляните на мой пример ниже.

Я создал UserControl под названием ColorTextBox и определил свойство FilledColor. В дизайнере я могу изменить цвет в поле со списком:

Свойство отображается на Property Tab:

Изображение 174551

Цвета в combobox, Drawing.Colors находятся под вкладкой Web:

Изображение 174551

После изменения FilledColor для Highlight:

Изображение 174551

Мой код довольно прост:

private Color _filledColor;

public ColorTextBox()
{
    InitializeComponent();
    _filledColor = Color.FromKnownColor(KnownColor.Control);
}

public Color FilledColor
{
    get { return _filledColor; }
    set
    {
        _filledColor = value;
        button1.BackColor = _filledColor;
    }
}

Единственное изменение - изменить свой тип свойства на "Цвет", а магия завершена.

  • 0
    ты то, что я ищу
1

Это моя последняя версия... теперь мне нужно привязать значения comboBox (что в combBox) к свойствам, когда я пытаюсь показать это

ВыбратьColor1 | Никто

    public static ComboBox ComboFill()
             {
                 ComboBox xx = new ComboBox();
                 ArrayList ColorList = new ArrayList();
                 Type colorType = typeof(System.Drawing.Color);
                 PropertyInfo[] propInfoList = colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public);
                 foreach (PropertyInfo c in propInfoList)
                 {
                     xx.Items.Add(c.Name);
                 }
                 return xx;
             }
           private Color colorfill1 = Color.Tomato;
           private Color colorfill2 = Color.Tomato;
           private ComboBox x1=ComboFill();
           private ComboBox x2=ComboFill();

     public ComboBox ChooseColor1 {

            get { return x1; }
            set { x1=value; OnPaint(null); }

        }
     public ComboBox ChooseColor2 {

            get { return x2; }
            set { x2=value; OnPaint(null); }

        }

     protected override void OnPaint(PaintEventArgs e)
            {
                    //my functions
//something with colorfill1
//something with colorfill2


            }
  • 0
    вам лучше отредактировать исходное сообщение, а не добавлять ответ здесь :)
1

следующий код даст вам представление о том, как вы можете связать комбо с помощью System.Drawing.Color. Также необходимо использовать пространство имен, используя System.Reflection;

ArrayList ColorList = new ArrayList();
        Type colorType = typeof(System.Drawing.Color);
        PropertyInfo[] propInfoList = colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.Public);
        foreach (PropertyInfo c in propInfoList)
        {
            this.comboBox1.Items.Add(c.Name);
        }
  • 0
    Более подробная информация на этом сайте c-sharpcorner.com/uploadfile/renuka11/…
  • 0
    спасибо за получение всех типов цвета, но все еще проблема хорошо, теперь у меня есть comboBox с AllColor, как я могу показать его в свойствах ?? я имею в виду, что я хочу, чтобы, когда пользователь использовал этот элемент управления, он имел свойства этого элемента управления: как у фона есть поле со списком цветов со списком всех цветов (код, который вы мне дали), я имею в виду, что я могу заполнить поле со списком, но как я связываю что за comboBox в свойствах ???
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню