2009-04-07 2 views

ответ

6

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

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.

+0

Спасибо Scraimer, все в порядке, я изменил некоторые строки, но в конце это работа. Хорошо провести время – JayJay

Смежные вопросы