2011-03-02 3 views
2

Windows의 공유 리소스라고 가정합니다. 각 응용 프로그램의 복사본을 만드는 대신 모든 Winforms 응용 프로그램에서 사용하는 것처럼이 아이콘을 사용할 수있는 방법이 있습니까?Windows에서 기본 Winforms 아이콘을 찾을 수있는 위치는 어디입니까?

어떻게 Winforms 앱에 기본적으로 지정됩니까? 코드 나 프로젝트 설정에서 어떤 아이콘에 대한 참조도 보이지 않습니다. 그냥 "기본 아이콘"을 사용합니다.

답변

9

System.Windows.Forms.dll 어셈블리에 리소스로 저장됩니다. 리플렉터로 사본을 얻을 수 있습니다. 어셈블리를 열고 Resources 노드를 열고 wfc.ico까지 내려갑니다. 마우스 오른쪽 버튼으로 클릭하고 다른 이름으로 저장을 클릭합니다. 기본 설정이므로 왜 사용해야하는지 확실하지 않습니다.

Project + 속성, 응용 프로그램 탭, 아이콘 설정을 사용하여 응용 프로그램에 대한 사용자 지정 아이콘을 설정합니다. 각 양식에는 고유 한 Icon 속성이 있습니다.

+0

감사합니다, 나는 나의 WPF 응용 프로그램의 기본 아이콘으로 사용하고 싶습니다. –

4

당신이 다음 (잠재적 응용 프로그램 아이콘/S 포함) 아이콘의 큰 컬렉션이 비주얼 스튜디오 2010가 설치되어있는 경우, 다음 디렉토리 체크 아웃 :

%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033 

이전에 유사한 디렉토리가있을 수 있습니다를 VS 버전은 필요한 경우 살펴 봅니다.

편집 :

Application.icoApplicationGeneric.ico +는 * .png를 대응 : app에 대한 압축이 풀린 파일의 폴더에서 검색을 수행에

이 개 주목할만한 결과가있다 .

VS 2010을 사용하고 여기에있는 아이콘 중 하나라도 적합하면 하나만 복사 할 필요가 없습니다. 파일을 간접적으로 (공유/링크 된 파일로) 포함 할 수 있어야합니다. Existing Item... 대화 상자를 사용하여 추가; Add 버튼 옆에있는 화살표를 선택하고 Add As Link 옵션을 선택하면됩니다.

원하는대로 작동하지 않는 것은 단순히 전역 변경을 적용하기 위해 이러한 파일을 덮어 쓰는 것입니다.

2

System.Windows.Forms.dll 어셈블리에 리소스로 저장됩니다. 당신은 folow로 반사 사본을 얻을 수 :

public static class FormUtils 
{ 
    private static Icon _defaultFormIcon; 
    public static Icon DefaultFormIcon 
    { 
     get 
     { 
      if (_defaultFormIcon == null) 
       _defaultFormIcon = (Icon)typeof(Form). 
        GetProperty("DefaultIcon", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).GetValue(null, null); 

      return _defaultFormIcon; 
     } 
    } 

    public static void SetDefaultIcon() 
    { 
     var icon = Icon.ExtractAssociatedIcon(EntryAssemblyInfo.ExecutablePath); 
     typeof(Form) 
      .GetField("defaultIcon", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static) 
      .SetValue(null, icon); 
    } 
} 

public static class FormExtensions 
{ 
    internal static void GetIconIfDefault(this Form dest, Form source) 
    { 
     if (dest.Icon == FormUtils.DefaultFormIcon) 
      dest.Icon = source.Icon; 
    } 
} 

을 그래서 당신은이 방법으로 같은 Icon.Handle에있는 코드에서 볼 수있다. 같은 참조. Form.DefaultIcon은 Form 클래스의 내부 지연로드 정적 속성입니다.

응용 프로그램의 기본 Winforms 아이콘을 재정의 할 수도 있습니다. Program.cs에서 내가 사용

FormUtils.SetDefaultIcon(); 

이 기능은 다음 응용 프로그램 등록 정보에 지정된 아이콘, 실행 파일의 아이콘이 기본 아이콘을 우선합니다.

C 번호 :

string IcoFilename = "C:\\Junk\\Default.ico"; 
using (System.IO.FileStream fs = new System.IO.FileStream(IcoFilename, System.IO.FileMode.Create)) 
{ 
    this.Icon.Save(fs); 
} 

Visual Basic의 :

0

당신은 단지 Save 방법을 사용할 수 있습니다

Dim strFilename As String = "C:\Junk\Default.ico" 
Using fs As New System.IO.FileStream(strFilename, IO.FileMode.Create) 
    Me.Icon.Save(fs) 
End Using 
관련 문제