これ何て呼びますか

http://social.msdn.microsoft.com/Forums/vstudio/ …

を参考に、

開発中のツールに
using System.Reflection;
using System.Resources;

private void Form1_Load(object sender, EventArgs e)
{
Assembly asm = Assembly.GetExecutingAssembly();

//ResourceManagerオブジェクトの作成(リソースResource1を追加してある)
ResourceManager rm = new ResourceManager( asm.GetName().Name + "a", asm);

// リソースよりIcon1.icoを取得する
Icon icon1 = (Icon)rm.GetObject("Icon1");
Cursor cur = new Cursor(icon1.Handle);

this.Cursor = cur;
}


を追加しました。

リソースにはjpegで書いた画像aを追加しました。
すると、
Icon icon1 = (Icon)rm.GetObject("Icon1");

"Icon1"の部分で、

指定されたカルチャまたはニュートラル カルチャに対して適切なリソースが見つかりませんでした。 "スーパーカーリングおひとりさまデッキブラシ.resources" が適切に埋め込まれたか、実行時にアセンブリ "スーパーカーリングおひとりさま" にリンクされたか、または必要なサテライト アセンブリが読み込まれて完全に署名されていることを確認してください。

というエラーメッセージが出ます。

そもそも、参考URLのページの質問者が、リソースにどのように画像を登録していたのかが不明です。
詳しくわかる方よろしくおねがいします。

A 回答 (2件)

具体的な手順はすでに回答ついているのでいいとして…



>リソースにはjpegで書いた画像aを追加しました。

画像ファイルではアイコンやマウスカーソルには使用できないかと。
アイコンエディタとかフリーでありますからそういうのでアイコンファイル(カーソルファイル)を作成してください。
    • good
    • 0
この回答へのお礼

なるほど!ありがとうございます。

お礼日時:2014/08/16 15:19

とりあえずそのC#プロジェクトの名前空間をWindowsFormApplication1とする。



まずリソースの追加だが、これはプロジェクトを右クリック→追加(D)→新しい項目(W)...→アセンブリ リソース ファイルで行う。そうするとResource1.resxというファイルが追加される(ファイル名を指定しなかった場合)。で、これがC#というかMicrosoft.Netの名前空間的にはWindowsFormsApplication1.Resource1という識別子になる。
で、Resource1を開くとResource1.resxというタイトルのリソース一覧窓になるのでリソースの追加(R)→新しいアイコンの追加(C)を選ぶ。そうするとIcon1.icoという埋め込みリソースファイルができる。
その上で、
~~~~~~~~
開発中のツールに
using System.Reflection;
using System.Resources;

private void Form1_Load(object sender, EventArgs e)
{
// ↓自分自身(EXE)のアセンブリを取得
Assembly asm = Assembly.GetExecutingAssembly();

//ResourceManagerオブジェクトの作成(リソースResource1を追加してある)
// ↓アセンブリからWindowsFormApplication1.Resource1という名前のリソースを取得
// ↓つまり、ここの第1引数は「WindowsFormApplication1.Resource1」という文字列を指定している
// ↓あなたのプログラムでは"a"になってたけどそれだと「WindowsFormApplication1a」になるわけだ
ResourceManager rm = new ResourceManager(asm.GetName().Name + ".Resource1", asm);

// リソースよりIcon1.icoを取得する
Icon icon1 = (Icon)rm.GetObject("Icon1");
Cursor cur = new Cursor(icon1.Handle);

this.Cursor = cur;
}
~~~~~~~~
とすると(EXEから見て)自分自身のアセンブリからリソースクラスを取得してアイコンを読むという動作になる。
以上が参考サイトの解説だけど・・・・EXEの中にアセンブリ リソース ファイルを入れて、その中にアイコンファイルを入れてそれを使いたいだけなら以下のようにすればいいよ。リフレクションも使う必要ない。
~~~~~~~~
private void Form1_Load(object sender, EventArgs e)
{
Cursor cur = new Cursor(Resource1.Icon1.Handle);
this.Cursor = cur;
}
~~~~~~~~
アセンブリ リソース ファイルResource1をプロジェクトに追加すると、自動的にEXEの名前空間(正確にはプロジェクトのプロパティの中にある「規定の名前空間」)内にResource1というクラスが出来上がり、そこにIcon1.icoを追加すると、プログラム中からResource1.Icon1にアクセスすることでアイコンを取得する事ができる。
    • good
    • 0
この回答へのお礼

詳しく説明有り難うございました。

お礼日時:2014/08/16 15:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報