如何按名称而不是位置索引图像列表

本文关键字:位置 索引图像 列表 何按名 | 更新日期: 2023-09-27 18:36:43

我是C#的新手,正在Windows 7上开发Visual Studios Express 2012。

我有一个图像列表,名称为 "a""b""c" ,我有一个组合框,其中包含选项"a""b""c"

我正在尝试将与组合框选择对应的图像添加到图片框中。

最初我使用的是职位而不是这样的名字:

         int i = comboBox1.SelectedIndex;
         pictureBox1.Image = imageList1.Images[i];

但是,我认为以后可能会对组合框选项进行更改,并且它们可能不再以相同的顺序进行,因此我想按名称而不是位置进行操作。

我试过这个:

         string name = comboBox1.SelectedText;
         int i = imageList1.Images.IndexOfKey(name);
         pictureBox1.Image = imageList1.Images[i];

但这会导致运行时错误System.ArgumentOutOfRangeException ... InvalidArgument=Value of '-1' is not valid for 'index' .

我也在想这样的事情可能会起作用:

         string grade = comboBox1.SelectedText;
         pictureBox1.Image = imageList1.ImageCollection.IndexOfKey(grade); 

         pictureBox1.Image = ImageList.ImageCollection.IndexOfKey(grade); 

但是这些给了我编译器错误

'ImageCollection': cannot reference a type through an expression; 
 try 'System.Windows.Forms.ImageList.ImageCollection'

An object reference is required for the non-static field, method, or property 
'System.Windows.Forms.ImageList.ImageCollection.IndexOfKey(string)'

我应该怎么做?对替代方法的建议?

提前谢谢。

如何按名称而不是位置索引图像列表

只需使用

imageList1.Images[comboBox1.SelectedItem.ToString()]; 

删除任何中断点或消息框

我尝试了 Tuco 的解决方案,但最终遇到了同样的错误。

通过尝试,我找到了我的解决方案...所以我为所有没有用给定的解决方案解决问题的人提供这个。

就我而言,这是一个名为tvFiles的树视图

/* Fill/Define the TreeViews ImageList */
tvFiles.ImageList   = imageList1;
/* Set the Index by Imagename */
tvFiles.ImageIndex  = imageList1.Images.IndexOfKey(imgName);