2012-03-10 3 views
1

У меня есть проблема с именем файла C#. Я показываю фотографии с PictureBox. Также я хочу написать имя изображения в TextBox. Я ищу fileinfo, directoryinfo, но он не работает.Как получить имя файла изображения в текстовом поле?

List<Image> images = new List<Image>(); 
images.Add(Properties.Resources.baseball_bat); 
images.Add(Properties.Resources.bracelet); 
images.Add(Properties.Resources.bride); 

pictureBox1.Image = images[..]; 

и я хочу написать baseball_bat, невесту, браслет и т. Д. В TextBox. Что я могу сделать? любое предложение?

+0

Все ли ваши изображения из «Properties.Resources» или это просто пример? – digEmAll

+0

Это небольшой пример. Если есть какие-то альтернативы, я могу попробовать. Я просто пишу имена. – nevra

+0

Как я уже сказал в своем ответе, вы можете сохранить как имя, так и изображение вместе, так что при извлечении одного элемента у вас есть имя и изображение. Но, вероятно, вам следует указать источник изображений, чтобы понять, подходит ли вам такой подход. – digEmAll

ответ

0

Эта функция уже встроена. ..

Списки изображений хранят свои изображения таким образом, чтобы вы могли ссылаться на m по имени и вернуть изображение.

Одноразовый:

private string GetImageName(ImageList imglist, int index) 
    { 
     return imglist.Images.Keys[index].ToString(); 
    } 

Это возвращает имя изображения на пройденный индекс

значения Магазин на потом:

private Dictionary<int, string> GetImageNames(ImageList imglist) 
    { 
     var dict = new Dictionary<int, string>(); 
     int salt = 0; 

     foreach (var item in imglist.Images.Keys) 
     { 
      dict.Add(salt, item.ToString()); 
      salt++; 
     } 
     return dict; 
    } 

Это возвращает словарь, который ссылается на индекс изображения к их имени строки в списке изображений.

Вновь это встроено, нет необходимости пытаться расширить функциональность. к нему ...

0

Вы можете получить все ресурсы вместе со своими ключами (название ресурсов) с помощью отражения:

//a helper dictionary if you want to save the images and their names for later use 
var namesAndImages = new Dictionary<String, Image>(); 

var resourcesSet = Properties.Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.CurrentCulture, true, true); 

     foreach (System.Collections.DictionaryEntry myResource in resourcesSet) 
     { 
      if (myResource.Value is Image) //is this resource is associated with an image 
      { 
       String resName = myResource.Key.ToString(); //get resource's name 
       Image resImage = myResource.Value as Image; //get the Image itself 

       namesAndImages.Add(resName, resImage); 
      } 
     } 

     //now you can use the values saved in the dictionary and easily get their names 
     ... 

Обновления: Я обновил код для сохранения значения в словаре, так вы можете удобно использовать их позже.

+0

ОК. Как я могу получить ключи? Я не могу понять, что делать. – nevra

+0

Используя код, который я опубликовал, вы можете получить изображения вместе с их именами, поэтому, когда вы устанавливаете изображение, вы также можете указать его имя. –

1

Ну, один из простейших методов позволяет сохранить как имя, так и изображение в List<KeyValuePair<string,Image>> или IDictionary<string,image>.

Вот пример с использованием IDictionary<string,image>
(я решил для SortedList<> из-за индексации):

var images = new SortedList<string, Image>(); 
images.Add("baseball_bat", Properties.Resources.baseball_bat); 
images.Add("bracelet", Properties.Resources.bracelet); 
... 

// when you show the first image... 
pictureBox1.Image = images.Values[0]; 
textBox1.Text = images.Keys[0]; 

// when you show the nth image... 
pictureBox1.Image = images.Values[n]; 
textBox1.Text = images.Keys[n]; 

Для List<KeyValuePair<string,Image>> будет:

var images = new List<KeyValuePair<string, Image>>(); 
images.Add(new KeyValuePair<string,Image>("baseball_bat", Properties.Resources.baseball_bat)); 
images.Add(new KeyValuePair<string,Image>("bracelet", Properties.Resources.bracelet)); 
... 

// when you show the first image... 
pictureBox1.Image = images[0].Values; 
textBox1.Text = images[0].Keys; 

// when you show the nth image... 
pictureBox1.Image = images[n].Values; 
textBox1.Text = images[n].Keys; 
+0

ОК. Я использовал List >, и я пишу, что images.Add («bracelet», Properties.Resources.bracelet); Где не так? Я думаю, мы закрываем решение. – nevra

+0

@physee: Использование списка kvpair отличается от словаря. Я отредактировал вопрос, чтобы было ясно. Обратите внимание на разницу в методах 'Add (...)' и на доступ к [...] ' – digEmAll

+0

Я сделал это. SortedList images = new SortedList (); Спасибо большое ... – nevra

 Смежные вопросы

  • Нет связанных вопросов^_^