Установка фона WinForm ListBox - PullRequest
       3

Установка фона WinForm ListBox

3 голосов
/ 07 апреля 2009

Кто-нибудь знает метод для вставки изображения в фоновом режиме в ListBox в WinForms C #?

1 Ответ

6 голосов
/ 07 апреля 2009

Ну, вам придется наследовать новый элемент управления от ListBox. Для этого создайте в своем решении новый проект типа «Библиотека элементов управления Windows» и используйте приведенный ниже код в файле исходного кода элемента управления файлом:

public partial class ListBoxWithBg : ListBox
{
   Image image;
   Brush brush, selectedBrush;

   public ListBoxWithBg()
   {
       InitializeComponent();

       this.DrawMode = DrawMode.OwnerDrawVariable;
       this.DrawItem += new DrawItemEventHandler(ListBoxWithBg_DrawItem);
       this.image = Image.FromFile("C:\\some-image.bmp");
       this.brush = new SolidBrush(Color.Black);
       this.selectedBrush = new SolidBrush(Color.White);
   }

   void ListBoxWithBg_DrawItem(object sender, DrawItemEventArgs e)
   {
       e.DrawBackground();
       e.DrawFocusRectangle();
       /* HACK WARNING: draw the last item with the entire image at (0,0) 
        * to fill the whole ListBox. Really, there's many better ways to do this,
        * just none quite so brief */
       if (e.Index == this.Items.Count - 1)
       {
           e.Graphics.DrawImage(this.image, new Point(0, 0));
       }
       else
       {
           e.Graphics.DrawImage(this.image, e.Bounds, e.Bounds, GraphicsUnit.Pixel);
       }
       Brush drawBrush = 
           ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 
           ? this.selectedBrush : this.brush;
       e.Graphics.DrawString(this.Items[e.Index].ToString(), this.Font, drawBrush, e.Bounds);
   }
}

Я для краткости опустил весь код конструктора и тому подобное, но вам придется запомнить Dispose изображения и кистей в Dispose методе управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...