有人可以给我任何关于我如何创建带有图标的列表框或指向我的教程的建议吗?
我使用查询将朋友的电子邮件和名称从数据库加载到列表框数据源中。
代码:
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)
答案 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
只允许一个大小!
当然,你需要获得正确的数据。由于Items
与DataSource
绑定,e.Index
应指向右侧。所以你应该能够提取名称或显示字符串;你还需要了解图像;我没有看到你读它,所以由你来解决这个问题..
如果他们坐在ImageList
中你可以很容易地拉出正确的,如果指数是同步的;或者您可以使用Keys
属性。使用Imagelist
无论如何都会修复所有图片的大小,因此您可以提前设置ItemHeight
..
请注意,我将位图的dpi分辨率设置为当前屏幕之一。
根据DrawBackground()
FillRectangle
而不是默认e.State
来电。