2009-02-03 5 views
2

나는 Treeview를 서브 클래 싱하고 인스턴스화시 새로운 ImageList (및 연관된 이미지)를로드합니다..Net C# 디자인 오류보기

디자이너보기로 전환 할 때마다이 코드도 실행하려고하지만 이미지가 디자이너의 경로에 있지 않아 충돌합니다. 나는 현재 디렉토리가 "Visual Studio"인지 확인하기 위해 해킹을 시도했다. 그런 다음 아무 것도하지 않겠지 만, 그렇게 못 생겼다.

나는 다른 일을 위해 이런 일이 일어나는 것을 발견했다. 컨트롤이로드/초기화 중에 프로그램을 실행하는 동안에 만 사용할 수있는 경우 디자인보기에서 컨트롤을 불러올 수 없습니다.

하지만이 문제를 해결할 수있는 방법이 있습니까?

필자가 바라는 것은 FileNotFoundException 등의 몇 가지 오류를 무시할 수있는 기능을 가진 Designer (전용)를 try/catch하는 것입니다. System.Windows.Forms.Control에서 상속

감사

답변

4

모든 디자인 모드에 있거나없는 경우를 나타내는 부울을 반환하는 DesignMode 속성이 있습니다. 이를 사용하여 외부 리소스를로드하지 않을시기를 결정할 수 있습니다.

1

일반적으로 이러한 리소스의로드를 OnLoad 무시로 이동하는 것이 좋습니다. 이렇게하면 표시되는 문제가 해결되고 적어도 한 번 표시되는 트리 만 이러한 추가 리소스로드 단계를 수행하게됩니다.

그렇지 않은 경우 DesignMode 속성을 확인하고 그에 따라 행동하여 디자인 단계에서이 단계를 제외 할 수 있습니다.

1

오른쪽 지시선 친구들을 안내해 주셔서 감사합니다.

OnLoad 이벤트에 등록을 시도했지만 디자인보기가 나타나면 해당 이벤트가 트리거되어 나를 위해 제대로 작동하지 않습니다 (잘못된 작업을하고 있습니까?).

어쨌든, 나는 DesignMode 속성에 대해 좀 더 살펴 보았습니다. 컨트롤에서만 작동하며 때로는 개체가 컨트롤이 아닐 수도 있습니다.

if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) { 
    // design-time stuff 
} else { 
    // run-time stuff 
} 

그것을 here 발견 :

그래서 여기에 내가 원하는 대답.

1

디자이너의 이미지를 볼 때 이미지 샘플을 사용하거나 다른 디자이너 기능에 연결하여 컨트롤 라이브러리를 만들고 있지만 개발 패턴으로 사용하면 매우 효과적인지 잘 모르겠습니다. .

나는 당신의 "비즈니스 로직"(이 경우에는 특정 이미지를 트리 뷰로로드)을 트리 뷰 컨트롤의 범위를 벗어난 위치로 옮길 것을 제안합니다. 귀하의 경우에는 컨트롤이 내부에 있음을 나는 폼의 Load 이벤트에서 논리를 배치 할 : 나는 개인적으로 당신도 양식 자체에서 논리를 이동하려면 생각보다 큰 앱의

public void Load(object sender, EventArgs e) 
{ 
    string path = "c:\somePath\toAwesome\Images"; 
    myFunkyTreeView.AddImages(path); 
} 

, 그러나 이것은이다 논쟁의 여지가있는 조치로서 이것은 이것이 제공하는 유연성에 대한 절충안으로서 추가 배관을 필요로하기 때문입니다.

+0

+1 : 비즈니스 특정 뷰 로직을 수행하기위한 WinForms 컨트롤의 서브 클래 싱은 유지할 수없는 재앙으로 끝납니다. 왝. –