2011-03-02 18 views
2

私はこれがWindowsのどこかの共有リソースだと仮定します。各アプリケーションのコピーを作成するのではなく、すべてのWinFormsアプリケーションが使用するのと同じように、このアイコンを使用する方法はありますか?WindowsのデフォルトのWinformsアイコンはどこにありますか?

これはWinFormsアプリケーションでどのようにデフォルトで指定されていますか?私は、コードやプロジェクトの設定でアイコンの参照が表示されません。ちょうどそれは "デフォルトアイコン"を使用します。

答えて

9

これは、System.Windows.Forms.dllアセンブリのリソースとして格納されます。リフレクターでコピーを手に入れることができます。アセンブリを開き、Resourcesノードを開いて「wfc.ico」まで下げます。右クリックし、[名前を付けて保存]をクリックします。それがデフォルトであるため、なぜそれを使いたいのか分かりません。

[プロジェクト+プロパティ]、[アプリケーション]タブ、アイコン設定でアプリケーションのカスタムアイコンを設定します。各フォームには独自のIconプロパティがあります。

+0

をおかげで、私は私のWPFアプリケーションのデフォルトのアイコンとしてそれを使用したいです。 –

4

あなたは(潜在的にアプリケーションアイコン/秒を含む)のアイコンの大規模なコレクションがあるのVisual Studio 2010がインストールされている場合は、以下のディレクトリをチェックアウト:

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

前回のための同様のディレクトリがあるかもしれませんがVSバージョン、必要がある場合は見てください。

EDIT:

appため、解凍したファイルのフォルダ内の検索を行うには2つの顕著な結果があります。

Application.icoApplicationGeneric.ico +その* .PNGの対応は。

あなたがVS 2010を持っていて、ここにあるアイコンが適切であれば、私はあなたが1つをコピーする必要はないと信じています - ファイルを間接的に(共有/リンクされたファイルとして) 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では、次のコードを使用します。

この関数は、アプリケーションプロパティで指定されたアイコン、実行可能ファイルのアイコンでデフォルトアイコンを上書きします。

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 
関連する問題