Daniel Lip
Daniel Lip

Reputation: 11343

How can i add some properties to UserControl?

I have this UserControl of a listBox:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Lightnings_Extractor
{
    public partial class ListBoxControl : UserControl
    {

        private List<int> m_itemIndexes = new List<int>();

        public ListBoxControl()
        {
            InitializeComponent();

            this.listBox1.SelectedIndex = 0;
        }

        private void listBox1_MouseDown(object sender, MouseEventArgs e)
        {
            int index = listBox1.IndexFromPoint(e.X, e.Y);
            listBox1.SelectedIndex = index;

            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                if (m_itemIndexes.Contains(index))
                    return;

                m_itemIndexes.Add(index);
                DrawItem(index);
            }
            else if (e.Button == MouseButtons.Left)
            {
                if (!m_itemIndexes.Contains(index))
                    return;

                m_itemIndexes.Remove(index);
                DrawItem(index);
            }
        }

        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            bool coloring = m_itemIndexes.Contains(e.Index);
            bool selected = (e.State & DrawItemState.Selected) == DrawItemState.Selected;

            if (coloring)
            {
                using (var brush = new SolidBrush(Color.Red))
                {
                    e.Graphics.FillRectangle(brush, e.Bounds);
                }
            }
            else
            {
                e.DrawBackground();
            }

            string item = listBox1.Items[e.Index].ToString();
            e.Graphics.DrawString(item, e.Font, selected || coloring ? Brushes.White : Brushes.Black, e.Bounds, StringFormat.GenericDefault);

            if (selected)
                e.DrawFocusRectangle();
        }

        private void DrawItem(int index)
        {
            Rectangle rectItem = listBox1.GetItemRectangle(index);
            listBox1.Invalidate(rectItem);
        }
    }
}

For example this line:

using (var brush = new SolidBrush(Color.Red))

Now it set to Red. But i want the user to be able to change it to any color in any place in his code or in another form or class. And not only in this UserControl code.

How can i add properties like this ?

Upvotes: 1

Views: 150

Answers (2)

itadapter DKh
itadapter DKh

Reputation: 590

Just declare a property as you normally would:

[Browsable(true)] //so it appears in object explorer
public Color MyListColor
{
  get { return m_MyListColor;}
  set 
  {
    m_MyListColor = value;
    Refresh();//or Update
  }
}

Once you set property to new value, it calls Refresh() that repaints control including your brushes.

Upvotes: 1

Euphoric
Euphoric

Reputation: 12849

Simply add a new property.

public Brush Fill {get;set;}

Upvotes: 0

Related Questions