c#中 如何在listview中的非第一列显示图片?注意是非第一列,急急急!
注意是非第一列的图片而不是第一列的图片,另外该图片可以根据自己的需要更改,在网上看说是可以调用listView1_DrawSubItem事件,但是就是不会用,比如我想靠点...
注意是非第一列的图片而不是第一列的图片,另外该图片可以根据自己的需要更改,在网上看说是可以调用listView1_DrawSubItem事件,但是就是不会用,比如我想靠点击一个button1使得listView1中的第一行第二列显示(一个图标+文字),该如何实现?本人新手,求代码(要有注释)。谢谢了。
展开
2个回答
展开全部
DrawSubItem我试过确实可以,但其他列的文字显示确不太理想,我暂时没有太多时间研究,你可以参考一下这个开源ListView的实现。
http://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView
另外给你看我自己的一些代码:
public Form2()
{
InitializeComponent();
// 表示由自己的代码绘制ListView
lvw_Locations.OwnerDraw = true;
// 注册ListView单元项的绘制事件
lvw_Locations.DrawSubItem += new DrawListViewSubItemEventHandler(lvw_Locations_DrawSubItem);
}
private void lvw_Locations_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
// 判断绘制的是ListView的第一行
if (e.ItemIndex == 0)
{
// 判断绘制的是第3列
if (e.ColumnIndex == 2)
{
e.Graphics.DrawImage(Image.FromFile(@"C:\Users\Administrator\Desktop\卡卡罗特.jpg"), e.Bounds);
}
}
}
http://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView
另外给你看我自己的一些代码:
public Form2()
{
InitializeComponent();
// 表示由自己的代码绘制ListView
lvw_Locations.OwnerDraw = true;
// 注册ListView单元项的绘制事件
lvw_Locations.DrawSubItem += new DrawListViewSubItemEventHandler(lvw_Locations_DrawSubItem);
}
private void lvw_Locations_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
// 判断绘制的是ListView的第一行
if (e.ItemIndex == 0)
{
// 判断绘制的是第3列
if (e.ColumnIndex == 2)
{
e.Graphics.DrawImage(Image.FromFile(@"C:\Users\Administrator\Desktop\卡卡罗特.jpg"), e.Bounds);
}
}
}
更多追问追答
追问
按照你上面的代码我尝试去做了一下,发现SubItem可以显示图片了,但是我的需求是一张小图片跟一段文字放在同一个格子里面,有什么解决办法?(比如我想显示:笑脸的图片+“开心”文本)难道只能把那段文字跟前面的图片制作成一张图片然后再显示?能不能分开来?还有e.Graphics.DrawImage(Image.FromFile(@"C:\Users\Administrator\Desktop\卡卡罗特.jpg"), e.Bounds);
中的e.Bounds怎么修改,怎么修改图片的对齐方式?
追答
我修改了下代码,图片和文字是可以用两行代码分别绘制的。其中文字占40个像素。至于e.Bounds,表示的是那个单元格的绘制矩形区域,你可以修改它的左上角坐标,及宽高。
void lvw_Locations_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
if (e.ItemIndex == 0 && e.ColumnIndex == 2)
{
e.Graphics.DrawImage(Image.FromFile(@"F:\图片\个人\千寻.png"), new Rectangle(e.Bounds.Location.X, e.Bounds.Y, e.Bounds.Width - 40, e.Bounds.Height));
e.Graphics.DrawString("千寻", new Font("宋体", 9.5f), Brushes.Red, new PointF(e.Bounds.X + e.Bounds.Width - 40, e.Bounds.Y));
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询