Изменить: вопрос заключается в добавлении свойства во время разработки, а не во время выполнения.
Я создал 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+"");
}
}
Вы имеете в виду свойство в Designer
? Пожалуйста, взгляните на мой пример ниже.
Я создал UserControl
под названием ColorTextBox
и определил свойство FilledColor
. В дизайнере я могу изменить цвет в поле со списком:
Свойство отображается на Property Tab
:
Цвета в combobox, Drawing.Colors находятся под вкладкой Web
:
После изменения FilledColor
для Highlight
:
Мой код довольно прост:
private Color _filledColor;
public ColorTextBox()
{
InitializeComponent();
_filledColor = Color.FromKnownColor(KnownColor.Control);
}
public Color FilledColor
{
get { return _filledColor; }
set
{
_filledColor = value;
button1.BackColor = _filledColor;
}
}
Единственное изменение - изменить свой тип свойства на "Цвет", а магия завершена.
Это моя последняя версия... теперь мне нужно привязать значения 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
}
следующий код даст вам представление о том, как вы можете связать комбо с помощью 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);
}