C#使用图标创建ListBox

时间:2016-06-30 17:47:20

标签: c# sql database winforms listbox

有人可以给我任何关于我如何创建带有图标的列表框或指向我的教程的建议吗?

这是我的计划:GUI

我使用查询将朋友的电子邮件和名称从数据库加载到列表框数据源中。

代码:

public void LoadUserData(ListBox FriendsLb)
{
    var query = from o in Globals.DB.Friends
                where o.UserEmail == Properties.Settings.Default.Email
                select new
                {
                    FirstName = o.FirstName,
                    LastName = o.LastName,
                    Email = o.Email,
                    Display = string.Format("{0} {1} - ({2})", o.FirstName, o.LastName, o.Email)
                };
    FriendsLb.DataSource = query.ToList();
    FriendsLb.ClearSelected();
}

我希望它加载如:[Avatar] Firstname, LastName - (Email)

1 个答案:

答案 0 :(得分:2)

以下是所有者提取 ListBox的基本示例。

private void FriendsLb_DrawItem(object sender, DrawItemEventArgs e)
{

    Bitmap bmp = someBitmap;
    bmp.SetResolution(e.Graphics.DpiX, e.Graphics.DpiY);
    e.DrawBackground();
    e.Graphics.DrawString(yourItemText, someFont, Brushes.Black, 
                          bmp.Width + 5, e.Bounds.Y);  // adapt to you liking

    if (bmp != null)
    {
        FriendsLb.ItemHeight = bmp.Height;  // or a little more..
        e.Graphics.DrawImage(bmp, 0, e.Bounds.Y);
    }

}

ListBox.DrawMode设置为OnwerDrawFixed

ListBox.ItemHeight实际上可以(并且应该)提前设置。请注意,所有Items只允许一个大小!

当然,你需要获得正确的数据。由于ItemsDataSource绑定,e.Index应指向右侧。所以你应该能够提取名称或显示字符串;你还需要了解图像;我没有看到你读它,所以由你来解决这个问题..

如果他们坐在ImageList中你可以很容易地拉出正确的,如果指数是同步的;或者您可以使用Keys属性。使用Imagelist无论如何都会修复所有图片的大小,因此您可以提前设置ItemHeight ..

请注意,我将位图的dpi分辨率设置为当前屏幕之一。

根据DrawBackground()

,您可能希望使用颜色更好的FillRectangle而不是默认e.State来电。