Я создаю пользовательский элемент управления в C # winforms.Я добавил ICON к ресурсу, этот значок затем рисуется на элементе управления, используя следующий код:
using (Icon oIcon = Properties.Resources.DropDownCustom)
{
Rectangle RectangleIcon = new Rectangle((DropDownRectangle.X + ((DropDownRectangle.Width / 2) - (oIcon.Width / 2))),
(DropDownRectangle.Y + (((DropDownRectangle.Height / 2) - (oIcon.Height / 2)) + 1)),
oIcon.Width,
oIcon.Height);
graphics.DrawIcon(oIcon, RectangleIcon);
}
Все это прекрасно работает без проблем, но затем я решил добавить параметр в элемент управлениясвойства, позволяющие разработчику загружать свой собственный значок, а не использовать тот, который я поместил в ресурс.Я создал личную переменную Icon:
private Icon _DropDownCustom;
изменил строку "using" в приведенном выше коде следующим образом:
using (Icon oIcon = _DropDownCustom)
, а затем добавил в конструктор следующую строку, чтобы установитьзначение по умолчанию к значению в ресурсах.
_DropDownCustom = Properties.Resources.DropDownCustom;
Затем я добавил свойство Icon, чтобы разработчик мог использовать свой собственный значок:
[Category("Appearance"), DisplayName("IconDropDown")]
public Icon IconDropDownCustom
{
get { return _DropDownCustom; }
set { _DropDownCustom = value; this.Invalidate(); }
}
Все это, похоже, работаетхорошо, за исключением того, что теперь, когда я просматриваю элемент управления в форме (в режиме разработки), он рисует значок на элементе управления - отлично, но как только я выбираю форму или элемент управления, значок исчезает, но остальное рисование остается (т.е.оценка фона).
Кто-нибудь знает, почему он, кажется, не перерисовывает иконку?
Большое спасибо.
РЕДАКТИРОВАТЬ: Я только что удалил "Using(){}
"часть кода и изменила его на:
Icon oIcon = _DropDownCustom;
Rectangle RectangleIcon = new Rectangle((DropDownRectangle.X + ((DropDownRectangle.Width / 2) - (oIcon.Width / 2))),
(DropDownRectangle.Y + (((DropDownRectangle.Height / 2) - (oIcon.Height / 2)) + 1)),
oIcon.Width,
oIcon.Height);
graphics.DrawIcon(oIcon, RectangleIcon);
Кажется, это работает как ожидалось, поэтому я предполагаю, что это как-то связано с использованием и утилизацией - все еще пытаюсь понять смещающую часть - не могли бы выпожалуйста, объясните, почему это происходит вг?Я предполагаю, что мой «oIcon» в основном просто ссылается на мою пользовательскую переменную Icon, а не «по значению» (я из VB фона).