2015-01-07 3 views
1

Я новичок в C# и я работаю над визуальной студии экспресс 2012 на Windows 7.Как индексировать список изображений по имени вместо позиции?

У меня есть ImageList изображений с именами "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)' 

Как мне это сделать? Предложения по альтернативным методам?

Заранее спасибо.

+1

pictureBox1.Image = imageList1.Images [comboBox1.SelectedText]; – Tuco

+0

@ 216, это не дает мне никаких ошибок, но никаких изображений не появляется в pictureBox1. Теперь, когда вы указали на это, я вижу, что визуальные студии дают второе определение для этого и позволяют использовать ключи, а не просто детексы. Поэтому вы правы, что должны работать. –

+0

Как вы заполняете imageList? – Tuco

ответ

1

Просто используйте

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

удалите breakbpoint или MessageBox

1

Я попытался решение Tuco и в конечном итоге в той же ошибки.

Попытавшись найти свое решение ... поэтому я предоставляю это всем, кто не решил проблему с данным решением.

В моем случае это был Treeview называется tvFiles

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

«Реальное» решение, плюс 1 – Omarrrio