2017-12-01 4 views
0

에 할당하는 것은 나는이 목록이 : 개, 고양이 및 말 : 내 자원에서이름으로 이미지 리소스에 액세스하고있는 PictureBox

List<string> list = new List<string>(); 
list.Add("dog.jpg"); 
list.Add("cat.jpg"); 
list.Add("horse.jpg"); 

을, 나는라는 이름의 3 개 이미지를 가지고있다. 목록을 사용하여 그림 상자에 표시하고 싶습니다.

나는 이런 식으로 뭔가를 시도 : 나는이 목록에 이름을 사용하여 이미지를 얻을 수있는 방법

'Resources' does not contain a definition for 'list' `

:

pictureBox1.Image = project.Properties.Resources.list[2]; // should display the horse image 

문제는 그것이 오류를 표시한다는 것입니다?

+0

리소스에 이미지를 어떻게 정의 했습니까? 스크린 샷을 넣을 수 있습니까? 또는 xml? – Sunil

+2

리소스를 참조하는 방법을 오해하는 것 같습니다. 암시 적으로'list [2]'가 문자열 값으로 대체되고 기존 자원을 참조하는 것처럼 구문 분석됩니다. 이것은 단순히 C#에서는 작동하지 않습니다 (리플렉션 없이는 사용하지 않아야합니다!). – Flater

+0

프로젝트의 폴더에 이미지를 배치하고 모든 이미지를 그런 식으로로드하는 것이 좋습니다. 그런 다음 위에서 시도한 것처럼 인덱서를 사용하여 설정할 수있는 이미지 배열을 얻을 수 있습니다. – Shelby115

답변

0

Properties.Resources 리소스 (개, 고양이, 말) 만 알고 있으므로 문자열을 줄 수 없으며 리소스를 알기를 기대할 수 있습니다. 이 같은 ResourceManager에에서 GetObject 메서드를 사용해야합니다 :

(Bitmap)Properties.Resources.ResourceManager.GetObject(list[2]) 

이 당신에게 말 이미지를 제공해야합니다.

-1

pictureBox1.Refresh();를 호출 해보십시오. 이미지를 지정한 후

+0

여전히 작동하지 않습니다. 그 문제는 "말"을 내부에서 보는 것보다 "list [2]"라는 이미지를 찾고 있다는 것입니다. –

+0

@VladAndrei : 문제의 핵심에 맞습니다. 하지만 지금하려는 것은 C#에서는 불가능합니다. "변수 변수 이름"개념 (예 : PHP에서'$ varname = "foo"'이면'$$ varname'은'$ foo' 변수를 참조합니다)이 C#에는 존재하지 않습니다. – Flater

0

이미지, 문자열 등을 리소스 파일 (.resx)에 추가하면 Visual Studio에서 자동으로 해당 Resources 클래스의 강력한 형식의 속성을 생성합니다. 예를 들어 프로젝트에 horse.jpgResources.resx에 추가 한 경우 을 반환하는 Properties.Resources 클래스에 horse 속성이 있어야합니다. 그래서 당신은 할 수 있어야한다 :

pictureBox1.Image = Properties.Resources.horse; 

당신이 이름으로 이미지 리소스에 액세스 할 수있게하려면, 당신은 그것을 생성 된 코드는 ResourceManager.GetObject를 사용하여, 그것을 않습니다 같은 방법으로 할 수 있습니다. 당신은 파일 이름 오프 확장자를 제거하고 리소스를 검색하는 도우미 메서드를 만들 수

pictureBox1.Image = (Bitmap)Properties.Resources.ResourceManager.GetObject("horse"); 

:하지만 이미지 리소스 이름이 .jpg 확장자를 포함하지 않습니다 유의 당신은 Bitmap에 결과를 캐스팅해야합니다 이 같은 :

이 같은 목록으로 사용할 수 있도록 할
private Bitmap GetImageResource(string filename) 
{ 
    string resourceName = filename.Substring(0, filename.IndexOf(".")); 
    return (Bitmap)Properties.Resources.ResourceManager.GetObject(resourceName); 
} 

:

pictureBox1.Image = GetImageResource(list[2]);