2009-09-19 5 views
2

나는 창문 양식 응용 프로그램을 작성하려고합니다. 일부 버튼이 있고 변수의 상태에 따라 버튼의 이미지를 변경해야합니다. 리소스 폴더에 이미지를 넣고 다음과 같이 이미지를 표시하려고합니다.C에서 클래스간에 데이터를 공유하는 가장 좋은 방법 #

이미지 im = Properties.Resources.green;

내 프로젝트의 모든 클래스에서 im 값을 "im"변수 이름을 사용하여 어떻게 연결할 수 있습니까?

답변

5

당신이 찾고있는 것은 단순한 전역 변수이지만 C#에서는 찾지 못했습니다. 간단한 대안은 다음과 같이 정적 공공 필드를 "메신저"(무엇이든 또는) 클래스 MyImages라는 만든 다음 수 있도록하는 것입니다 :

public class MyImages 
{ 
    public static Image im = Properties.Resources.green; 
} 

그런 다음, 어디서나 프로젝트에서, 당신은 "메신저에 액세스 할 수 있습니다 "이 같은 코드 :

Image newImage = MyImages.im; 

일부 프로그래머들은이 같은에서 공포에 반동 수 있으며, 주장"의존성 주입 "또는 적절한 싱글 또는 만들기"메신저 "개인 및 만드는 GET 설정/공유 재산 , 또는 그런 것. 그러나 코드에서 어디서나이 이미지에 액세스해야하는 경우 간단하고 효과적인 방법이며 한 곳에서 이미지를 생성하도록 코드를 유지하는 것이 목표입니다.

+0

을 찾습니다. ** ** 유연한 방법입니다. – Joren

+0

@Joren : 음, 좋아요,하지만 그것을 통과 시키십시오 * 어떻게 * 어디서 *, 정확히? 내 코드 샘플에서 이미지는 리소스에서 정확히 한 번 추출 된 다음 "MyImages.im"을 호출하여 프로젝트 내의 모든 코드에서 사용할 수 있습니다. – MusiGenesis

+0

Form을 생성자에서 가져 와서 비공개 필드에 저장해야합니다. 그런 다음 양식에 정의 된 모든 이벤트 핸들러가이를 직접 사용할 수 있습니다. 폼의 자식 인 사용자 지정 컨트롤이 이미지에 액세스해야하는 경우 해당 컨트롤의 해당 컨트롤로 전달합니다. 이 부분은 지나치지 만 추가로 변경하지 않아도 코드의 일부를 다른 이미지로 재사용 할 수 있습니다. – Joren

1

당신은 ResourceManager에를 사용하여 시도 할 수 : 추가 정보를 위해

ResourceManager rm = new ResourceManager("items", Assembly.GetExecutingAssembly()); 

난 그냥 이미지를 한 번 가져오고 그것을 필요로 아무것도에 전달할 것 here

관련 문제