Как я могу включить значки в свой ListBox? - PullRequest
1 голос
/ 01 декабря 2011

Я знаю, что подобные вопросы уже задавались здесь ранее, но все они приводят к той же статье codeproject , которая не работает. Кто-нибудь знает о рабочем ListBox с иконками?

Ответы [ 4 ]

3 голосов
/ 01 декабря 2011

Будет ли ListView работать на вас?Это то, что я использую.Гораздо проще, и вы можете сделать его похожим на ListBox.Кроме того, имеется множество документации по MSDN, с которой можно начать.

Практическое руководство. Отображение значков для элемента управления Windows Forms ListView
Элемент управления Windows Forms ListView может отображать значки изтри списка изображений.Представления List, Details и SmallIcon отображают изображения из списка изображений, указанного в свойстве SmallImageList.Представление LargeIcon отображает изображения из списка изображений, указанного в свойстве LargeImageList.В виде списка также может отображаться дополнительный набор значков, установленный в свойстве StateImageList, рядом с большими или маленькими значками.Для получения дополнительной информации о списках изображений см. Компонент ImageList (Windows Forms) и Как: добавить или удалить изображения с помощью компонента ImageList Windows Forms.

Вставлено из Как: отображать значки дляЭлемент управления ListView Windows Forms

1 голос
/ 30 мая 2017

Если вы не хотите изменять ListBox на ListView, вы можете написать обработчик для DrawItemEvent.например:

private void InitializeComponent()
{
    ...
    this.listBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox_DrawItem);
    ...
 }
private void listBox_DrawItem(object sender, DrawItemEventArgs e)
    {
        if (e.Index == -1)
            return;
        // Draw the background of the ListBox control for each item.
        e.DrawBackground();
        var rect = new Rectangle(e.Bounds.X+10, e.Bounds.Y+8, 12, 14);
       //assuming the icon is already added to project resources
        e.Graphics.DrawIconUnstretched(YourProject.Properties.Resources.YouIcon, rect);
        e.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(),
            e.Font, Brushes.Black, new Rectangle(e.Bounds.X + 25, e.Bounds.Y + 10, e.Bounds.Width, e.Bounds.Height), StringFormat.GenericDefault);
        // If the ListBox has focus, draw a focus rectangle around the selected item.
        e.DrawFocusRectangle();
    }

Вы можете поиграться с прямоугольником, чтобы установить расположение значка справа

1 голос
/ 01 декабря 2011

Немного другой подход - не используйте список.Вместо того, чтобы использовать этот элемент управления, ограничивающий меня ограниченным набором свойств и методов, я создаю собственный список.

Это не так сложно, как кажется:

int yPos = 0;    
Panel myListBox = new Panel();
foreach (Object object in YourObjectList)
{
    Panel line = new Panel();
    line.Location = new Point(0, Ypos);
    line.Size = new Size(myListBox.Width, 20);
    line.MouseClick += new MouseEventHandler(line_MouseClick);
    myListBox.Controls.Add(line);

    // Add and arrange the controls you want in the line

    yPos += line.Height;
}

Пример дляОбработчики событий myListBox - выбор строки:

private void line_MouseClick(object sender, MouseEventArgs)
{
    foreach (Control control in myListBox.Controls)
        if (control is Panel)
            if (control == sender)
                control.BackColor = Color.DarkBlue;
            else
                control.BackColor = Color.Transparent;      
}

Приведенные выше примеры кода не были протестированы, но описанный метод использовался и оказался очень удобным и простым.

1 голос
/ 01 декабря 2011

Если вы застряли, работая в WinForms, вам придется рисовать свои элементы владельцем.

См. Пример для события DrawItem .

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