2012-03-10 6 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, 신부, 팔찌를 쓰고 싶어요. 내가 무엇을 할 수 있을지? 어떤 제안?

당신은 반사를 사용하여 자신의 키 (자원의 이름)와 함께 모든 자원을 얻을 수 있습니다
+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; 
    } 

이 인덱스를 참조하는 사전을 반환 이미지를 이미지 목록의 문자열 이름에 추가합니다.

다시 한번 이것이 내장되어 있으므로 funct를 확장하려고하지 않아도됩니다. 그것을 ...

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>에 저장하는 것입니다. List<KeyValuePair<string,Image>>를 들어

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]; 

은 다음과 같습니다 :

는 여기 IDictionary<string,image>
(나는 때문에 색인의 SortedList<>에 대한 결정)을 사용하여 예입니다

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 <문자열, 이미지> 이미지 = 새 SortedList <문자열, 이미지>(); 고마워요 ... – nevra