Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WinForms-ListViewItem图像未显示_C#_Winforms_Listviewitem - Fatal编程技术网

C#WinForms-ListViewItem图像未显示

C#WinForms-ListViewItem图像未显示,c#,winforms,listviewitem,C#,Winforms,Listviewitem,对于每个ListViewItem的图像都没有显示,我有一个相当小的问题。每个服务名称旁边都应该有一个图像,但没有显示应用程序。EnableVisualStyles()处于启用状态。我试着将资源图像设置为PictureBox,作为一种测试,效果不错。在designer中添加了两个列标题。为每个项目正确设置索引,还尝试分配ImageKey 已经阅读了这里的多个类似问题,但没有一个能解决这个问题 加载时完成ImageList的初始化 ImageList serviceLogoList = ne

对于每个
ListViewItem
的图像都没有显示,我有一个相当小的问题。每个服务名称旁边都应该有一个图像,但没有显示<代码>应用程序。EnableVisualStyles()处于启用状态。我试着将资源图像设置为
PictureBox
,作为一种测试,效果不错。在designer中添加了两个列标题。为每个项目正确设置索引,还尝试分配
ImageKey

已经阅读了这里的多个类似问题,但没有一个能解决这个问题

加载时完成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=新的ImageList
{
ImageSize=新尺寸(32,32),
ColorDepth=ColorDepth.Depth32位
};
serviceLogoList.Images.Add(Properties.Resources.p1);
servicelogolost.Images.Add(Properties.Resources.p2);
ListViewDisableItemsServices.View=View.Details;
ListViewDisableItemsServices.LargeImageList=serviceLogoList;
ListViewDisableItemsServices.SmallImageList=serviceLogoList;
ListViewItem1=新ListViewItem(“test1”);
item1.ImageIndex=0;
第1项。子项。添加(“XD1”);
ListViewItem2=新ListViewItem(“test2”);
item2.ImageIndex=1;
第2项。子项。添加(“XD2”);
ListViewDisableItemsServices.Items.Add(item1);
ListViewDisableItemsServices.Items.Add(item2);

我认为您的
开关
不能用于设置
ImageIndex
。您可以添加Debug来检查是否设置了
ImageIndex

我尝试创建一个类似的winform项目,它可以正常工作

我的示例代码:

ImageList serviceLogoList=新的ImageList
{
ImageSize=新尺寸(32,32),
ColorDepth=ColorDepth.Depth32位
};
serviceLogoList.Images.Add(Properties.Resources.p1);
servicelogolost.Images.Add(Properties.Resources.p2);
ListViewDisableItemsServices.View=View.Details;
ListViewDisableItemsServices.LargeImageList=serviceLogoList;
ListViewDisableItemsServices.SmallImageList=serviceLogoList;
ListViewItem1=新ListViewItem(“test1”);
item1.ImageIndex=0;
第1项。子项。添加(“XD1”);
ListViewItem2=新ListViewItem(“test2”);
item2.ImageIndex=1;
第2项。子项。添加(“XD2”);
ListViewDisableItemsServices.Items.Add(item1);
ListViewDisableItemsServices.Items.Add(item2);

我认为您的
开关
不能用于设置
ImageIndex
。您可以添加调试以检查是否设置了
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";
    }
}
}
namespace WindowsFormsApp1
{
公共部分类Form1:Form
{
列表_服务=新列表();
公共表格1()
{
初始化组件();
初始化列表视图();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
LoadServices();
ListViewDisableItemsServices.Columns.Add(“名称”,100);
ListViewDisableItemsServices.Columns.Add(“状态”,100);
foreach(var服务在_服务中)
{
if(service.ServiceType==常量.service\u TYPE\u存储)
{
ListViewItem项=新的ListViewItem(service.Label);
item.SubItems.Add(service.error或interpretecderror??Lang.GetString(“Common_OK”);
item.Tag=服务;
交换机(service.ServiceName)
{
案例“谷歌”:
item.ImageIndex=0;
打破
案例“dropbox”:
item.ImageIndex=1;
打破
案例“seeyou”:
item.ImageIndex=2;
打破
}
ListViewDisableItemsServices.Items.Add(项目);
如果(!service.isAuthenticatedAvailable)
{
//ListViewDisableItemsServices.DisableItem(项目);
}
}
}
}
专用void LoadServices()
{
_添加(新的存储服务)
{
ServiceType=“存储”,
Label=“谷歌”,
ServiceName=“谷歌”,
IsAuthenticatedAvailable=false,
ErrorOrInterpretecderRor=“需要注册”
});
_添加(新的存储服务)
{
ServiceType=“存储”,
Label=“下拉框”,
ServiceName=“dropbox”,
IsAuthenticatedAvailable=true
});
_添加(新的存储服务)
{
ServiceType=“存储”,
Label=“再见”,
ServiceName=“再见”,
IsAuthenticatedAvailable=true
});
}
私有void initializeListView()
{
ImageList serviceLogoList=新的ImageList
{
ImageSize=新尺寸(32,32),
ColorDepth=ColorDepth.Depth32位
};
serviceLogoList.Images.Add(Properties.Resources.drive\u徽标);
serviceLogoList.Images.Add(Properties.Resources.dropbox\u logo);
serviceLogoList.Images.Add(Properties.Resources.seeyou\u logo);
ListViewDisableItemsServices.View=View.Details;
ListViewDisableItemsServices.LargeImageList=serviceLogoList;
ListViewDisableItemsServices.SmallImageList=serviceLogoList;
}
}
类存储服务
{
公共字符串服务类型{get;set;}
公共字符串ServiceName{get;set;}
公共字符串标签{get;set;}
公共字符串ErrorOrInterpreterError{get;set;}
公共布尔值已验证且可用{get;set;}
}
类常数
{
公用常量字符串服务\u TYPE\u STORAGE=“STORAGE”;
}
朗班
{
公共静态字符串GetString(字符串键)
{
返回“OK”