C# WinForms - ListViewItem 图像未显示
C# WinForms - ListViewItem image not showing
我有一个相当小的问题,即每个 ListViewItem
的图像都没有显示。每个服务名称旁边应该有一个图像,但是 none 出现了。 Application.EnableVisualStyles();
已开启。我尝试将资源图像设置为 PictureBox
作为测试,并且工作正常。设计器中添加了两列 headers。为每个项目正确设置索引,还尝试分配 ImageKey
.
已经在此处阅读了多个类似的问题,但none解决了这个问题。
加载时完成 ImageList 的初始化
ImageList serviceLogoList = new ImageList
{
ImageSize = new Size(32, 32),
ColorDepth = ColorDepth.Depth32Bit
};
serviceLogoList.Images.Add(Properties.Resources.drive_logo);
serviceLogoList.Images.Add(Properties.Resources.dropbox_logo);
serviceLogoList.Images.Add(Properties.Resources.seeyou_logo);
listViewDisablableItemsServices.View = View.Details;
listViewDisablableItemsServices.LargeImageList = serviceLogoList;
listViewDisablableItemsServices.SmallImageList = serviceLogoList;
将图像分配给每一行
foreach (var service in _services)
{
if (service.ServiceType == Constants.SERVICE_TYPE_STORAGE)
{
ListViewItem item = new ListViewItem(service.Label);
item.SubItems.Add(service.ErrorOrInterpretedError ?? Lang.GetString("Common_OK"));
item.Tag = service;
switch (service.ServiceName)
{
case "google":
item.ImageIndex = 0;
break;
case "dropbox":
item.ImageIndex = 1;
break;
case "seeyou":
item.ImageIndex = 2;
break;
}
listViewDisablableItemsServices.Items.Add(item);
if (!service.IsAuthenticatedAndAvailable)
{
listViewDisablableItemsServices.DisableItem(item);
}
}
}
图像应显示的位置
我尝试创建一个类似的 winform 项目并且它有效。
我的示例代码:
ImageList serviceLogoList = new ImageList
{
ImageSize = new Size(32, 32),
ColorDepth = ColorDepth.Depth32Bit
};
serviceLogoList.Images.Add(Properties.Resources.p1);
serviceLogoList.Images.Add(Properties.Resources.p2);
listViewDisablableItemsServices.View = View.Details;
listViewDisablableItemsServices.LargeImageList = serviceLogoList;
listViewDisablableItemsServices.SmallImageList = serviceLogoList;
ListViewItem item1 = new ListViewItem("test1");
item1.ImageIndex = 0;
item1.SubItems.Add("XD1");
ListViewItem item2 = new ListViewItem("test2");
item2.ImageIndex = 1;
item2.SubItems.Add("XD2");
listViewDisablableItemsServices.Items.Add(item1);
listViewDisablableItemsServices.Items.Add(item2);
我想你的switch
没有输入设置ImageIndex
。您可以添加 Debug 来检查 ImageIndex
是否已设置。
我认为您缺少添加列
listViewDisablableItemsServices.Columns.Add("Name",100);
listViewDisablableItemsServices.Columns.Add("Status",100);
我正在发布基于您示例的工作代码
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
List<StorageService> _services = new List<StorageService>();
public Form1()
{
InitializeComponent();
initializeListView();
}
private void Form1_Load(object sender, EventArgs e)
{
LoadServices();
listViewDisablableItemsServices.Columns.Add("Name",100);
listViewDisablableItemsServices.Columns.Add("Status",100);
foreach (var service in _services)
{
if (service.ServiceType == Constants.SERVICE_TYPE_STORAGE)
{
ListViewItem item = new ListViewItem(service.Label);
item.SubItems.Add(service.ErrorOrInterpretedError ?? Lang.GetString("Common_OK"));
item.Tag = service;
switch (service.ServiceName)
{
case "google":
item.ImageIndex = 0;
break;
case "dropbox":
item.ImageIndex = 1;
break;
case "seeyou":
item.ImageIndex = 2;
break;
}
listViewDisablableItemsServices.Items.Add(item);
if (!service.IsAuthenticatedAndAvailable)
{
//listViewDisablableItemsServices.DisableItem(item);
}
}
}
}
private void LoadServices()
{
_services.Add(new StorageService
{
ServiceType = "Storage",
Label = "Google",
ServiceName = "google",
IsAuthenticatedAndAvailable = false,
ErrorOrInterpretedError = "Sign up required"
});
_services.Add(new StorageService
{
ServiceType = "Storage",
Label = "Drop box",
ServiceName = "dropbox",
IsAuthenticatedAndAvailable = true
});
_services.Add(new StorageService
{
ServiceType = "Storage",
Label = "See You",
ServiceName = "seeyou",
IsAuthenticatedAndAvailable = true
});
}
private void initializeListView()
{
ImageList serviceLogoList = new ImageList
{
ImageSize = new Size(32, 32),
ColorDepth = ColorDepth.Depth32Bit
};
serviceLogoList.Images.Add(Properties.Resources.drive_logo);
serviceLogoList.Images.Add(Properties.Resources.dropbox_logo);
serviceLogoList.Images.Add(Properties.Resources.seeyou_logo);
listViewDisablableItemsServices.View = View.Details;
listViewDisablableItemsServices.LargeImageList = serviceLogoList;
listViewDisablableItemsServices.SmallImageList = serviceLogoList;
}
}
class StorageService
{
public string ServiceType { get; set; }
public string ServiceName { get; set; }
public string Label { get; set; }
public string ErrorOrInterpretedError { get; set; }
public bool IsAuthenticatedAndAvailable { get; set; }
}
class Constants
{
public const string SERVICE_TYPE_STORAGE = "Storage";
}
class Lang
{
public static string GetString(string key)
{
return "OK";
}
}
}
删除然后 re-adding 我的原始代码中的 ListView
组件解决了这个问题。 Visual Studio 也已在 re-adding 之后重新启动。
我有一个相当小的问题,即每个 ListViewItem
的图像都没有显示。每个服务名称旁边应该有一个图像,但是 none 出现了。 Application.EnableVisualStyles();
已开启。我尝试将资源图像设置为 PictureBox
作为测试,并且工作正常。设计器中添加了两列 headers。为每个项目正确设置索引,还尝试分配 ImageKey
.
已经在此处阅读了多个类似的问题,但none解决了这个问题。
加载时完成 ImageList 的初始化
ImageList serviceLogoList = new ImageList
{
ImageSize = new Size(32, 32),
ColorDepth = ColorDepth.Depth32Bit
};
serviceLogoList.Images.Add(Properties.Resources.drive_logo);
serviceLogoList.Images.Add(Properties.Resources.dropbox_logo);
serviceLogoList.Images.Add(Properties.Resources.seeyou_logo);
listViewDisablableItemsServices.View = View.Details;
listViewDisablableItemsServices.LargeImageList = serviceLogoList;
listViewDisablableItemsServices.SmallImageList = serviceLogoList;
将图像分配给每一行
foreach (var service in _services)
{
if (service.ServiceType == Constants.SERVICE_TYPE_STORAGE)
{
ListViewItem item = new ListViewItem(service.Label);
item.SubItems.Add(service.ErrorOrInterpretedError ?? Lang.GetString("Common_OK"));
item.Tag = service;
switch (service.ServiceName)
{
case "google":
item.ImageIndex = 0;
break;
case "dropbox":
item.ImageIndex = 1;
break;
case "seeyou":
item.ImageIndex = 2;
break;
}
listViewDisablableItemsServices.Items.Add(item);
if (!service.IsAuthenticatedAndAvailable)
{
listViewDisablableItemsServices.DisableItem(item);
}
}
}
图像应显示的位置
我尝试创建一个类似的 winform 项目并且它有效。
我的示例代码:
ImageList serviceLogoList = new ImageList
{
ImageSize = new Size(32, 32),
ColorDepth = ColorDepth.Depth32Bit
};
serviceLogoList.Images.Add(Properties.Resources.p1);
serviceLogoList.Images.Add(Properties.Resources.p2);
listViewDisablableItemsServices.View = View.Details;
listViewDisablableItemsServices.LargeImageList = serviceLogoList;
listViewDisablableItemsServices.SmallImageList = serviceLogoList;
ListViewItem item1 = new ListViewItem("test1");
item1.ImageIndex = 0;
item1.SubItems.Add("XD1");
ListViewItem item2 = new ListViewItem("test2");
item2.ImageIndex = 1;
item2.SubItems.Add("XD2");
listViewDisablableItemsServices.Items.Add(item1);
listViewDisablableItemsServices.Items.Add(item2);
我想你的switch
没有输入设置ImageIndex
。您可以添加 Debug 来检查 ImageIndex
是否已设置。
我认为您缺少添加列
listViewDisablableItemsServices.Columns.Add("Name",100);
listViewDisablableItemsServices.Columns.Add("Status",100);
我正在发布基于您示例的工作代码
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
List<StorageService> _services = new List<StorageService>();
public Form1()
{
InitializeComponent();
initializeListView();
}
private void Form1_Load(object sender, EventArgs e)
{
LoadServices();
listViewDisablableItemsServices.Columns.Add("Name",100);
listViewDisablableItemsServices.Columns.Add("Status",100);
foreach (var service in _services)
{
if (service.ServiceType == Constants.SERVICE_TYPE_STORAGE)
{
ListViewItem item = new ListViewItem(service.Label);
item.SubItems.Add(service.ErrorOrInterpretedError ?? Lang.GetString("Common_OK"));
item.Tag = service;
switch (service.ServiceName)
{
case "google":
item.ImageIndex = 0;
break;
case "dropbox":
item.ImageIndex = 1;
break;
case "seeyou":
item.ImageIndex = 2;
break;
}
listViewDisablableItemsServices.Items.Add(item);
if (!service.IsAuthenticatedAndAvailable)
{
//listViewDisablableItemsServices.DisableItem(item);
}
}
}
}
private void LoadServices()
{
_services.Add(new StorageService
{
ServiceType = "Storage",
Label = "Google",
ServiceName = "google",
IsAuthenticatedAndAvailable = false,
ErrorOrInterpretedError = "Sign up required"
});
_services.Add(new StorageService
{
ServiceType = "Storage",
Label = "Drop box",
ServiceName = "dropbox",
IsAuthenticatedAndAvailable = true
});
_services.Add(new StorageService
{
ServiceType = "Storage",
Label = "See You",
ServiceName = "seeyou",
IsAuthenticatedAndAvailable = true
});
}
private void initializeListView()
{
ImageList serviceLogoList = new ImageList
{
ImageSize = new Size(32, 32),
ColorDepth = ColorDepth.Depth32Bit
};
serviceLogoList.Images.Add(Properties.Resources.drive_logo);
serviceLogoList.Images.Add(Properties.Resources.dropbox_logo);
serviceLogoList.Images.Add(Properties.Resources.seeyou_logo);
listViewDisablableItemsServices.View = View.Details;
listViewDisablableItemsServices.LargeImageList = serviceLogoList;
listViewDisablableItemsServices.SmallImageList = serviceLogoList;
}
}
class StorageService
{
public string ServiceType { get; set; }
public string ServiceName { get; set; }
public string Label { get; set; }
public string ErrorOrInterpretedError { get; set; }
public bool IsAuthenticatedAndAvailable { get; set; }
}
class Constants
{
public const string SERVICE_TYPE_STORAGE = "Storage";
}
class Lang
{
public static string GetString(string key)
{
return "OK";
}
}
}
删除然后 re-adding 我的原始代码中的 ListView
组件解决了这个问题。 Visual Studio 也已在 re-adding 之后重新启动。