211

プログラムのさまざまな部分で簡単に参照および使用できるリソースを作成するにはどうすればよいですか?

私の特定の問題は、プログラムの状態に応じてアイコンを変更したい NotifyIcon があることです。よくある問題ですが、私が長い間苦労してきた問題です。

4

4 に答える 4

353

さて、StackOverflow 周辺のさまざまなポイントを検索してまとめた後 (私はこの場所が大好きです)、ほとんどの問題はすでにこの段階を過ぎていました。しかし、私は自分の問題に対する答えを見つけることができました。

リソースの作成方法:

私の場合、アイコンを作成したいと思います。ただし、リソースとして追加するデータの種類に関係なく、同様のプロセスです。

  • リソースを追加するプロジェクトを右クリックします。これは、ソリューション エクスプローラーで行います。リストから「プロパティ」オプションを選択します。
  • [リソース] タブをクリックします。
  • バーの上部にある最初のボタンを使用すると、追加するリソースの種類を選択できます。文字列で開始する必要があります。アイコンを追加したいので、アイコンをクリックして、オプションのリストから「アイコン」を選択します。
  • 次に、2 つ目のボタン「リソースの追加」に移動します。新しいリソースを追加するか、既に作成済みのアイコンがある場合は、それも追加できます。選択したオプションのプロンプトに従います。
  • この時点で、新しく追加されたリソースをダブルクリックして編集できます。リソースはソリューション エクスプローラーにも表示されることに注意してください。リソースをダブルクリックしても同じように効果的です。

リソースの使用方法:

新しいリソースができたので、素敵な変化するアイコンが欲しくてうずうずしています...どうすればいいですか?幸運なことに、C# を使用すると、これが非常に簡単になります。

Properties.Resourcesすべてのリソースにアクセスできるようにする静的クラスが呼び出されるため、コードは次のように単純になりました。

paused = !paused;
if (paused)
    notifyIcon.Icon = Properties.Resources.RedIcon;
else
    notifyIcon.Icon = Properties.Resources.GreenIcon;

終わり!終了した!方法がわかれば、すべてが簡単ですよね。

于 2008-09-18T07:21:43.547 に答える
10

上記は、Visual Studio 2010 で期待していたように、実際には機能しませんでした。Properties.Resources にアクセスできませんでした。権限の問題によりアクセスできないとのことでした。最終的にリソースのプロパティで永続化設定を変更する必要がありましたが、Resources.Designer.cs ファイルを介してリソースにアクセスする方法を見つけました。このファイルには、MyNamespace.Properties.Resources を介してアイコンにアクセスできる自動ゲッターがありました。 .NameFromAddingTheResource. これは、すぐに使用できるアイコン型のオブジェクトを返します。

于 2011-06-14T19:38:25.537 に答える
8

上記の方法はうまくいきます。

別の方法 (ここでは Web を想定しています) は、ページを作成することです。コントロールをページに追加します。次に、デザイン モードで[ツール] > [ローカル リソースの生成] に移動します。リソース ファイルは、ページ内のすべてのコントロールがリソース ファイルにマップされた状態で、ソリューションに自動的に表示されます。

他の言語のリソースを作成するには、拡張子の前に、ファイル名の末尾に 4 文字の言語を追加します ( Account.aspx.en-US.resx、Account.aspx.es-ES.resx ...など)。

コード ビハインドで特定のエントリを取得するには、次のメソッドを呼び出すだけですGetLocalResourceObject([resource entry key/name])

于 2008-09-18T07:35:48.350 に答える
2

Matthew Scharley によって投稿されたコードには、メモリ リークがあります。

paused = !paused;
if (paused)
    notifyIcon.Icon = Properties.Resources.RedIcon;
else
    notifyIcon.Icon = Properties.Resources.GreenIcon;

使用するたびに新しいアイコンが作成されるDispose()ため、置き換える前に Icon.Icon に通知する必要があります。これは、次のコードを使用してログで確認できます。Properties.Resources.SOME_ICONIcon

Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());
Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());
Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());

ログに 3 つの異なるハッシュ コードが表示されます。これは、これらが異なるオブジェクトであることを意味します。

したがって、簡単な修正は次のようになります。

paused = !paused;
notifyIcon.Icon?.Dispose();
notifyIcon.Icon = paused 
                    ? Properties.Resources.RedIcon;
                    : Properties.Resources.GreenIcon;
于 2021-06-13T12:58:49.120 に答える