これはインタビューの質問でした。 Visual Studio 2008と.PNGファイルとして保存されたアイコンを考えると、埋め込みリソースとして画像を使用し、フォームのタイトルバー内のアイコンとして使用する必要がありました。
この質問に対するモデルの答えとなるものを探しています。両方の(動作している!)コードとVisual Studioのトリック。 (モデルの回答は、次に出会ったときに仕事が得られるはずです。)
具体的には、埋め込みリソースになった画像を読み込む方法や、タイトルバーのアイコンとして取得する方法がわかりません。
一部のソリューションとして、埋め込みビットを無視して、リソースを出力ディレクトリにコピーし、次のことを試しました:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Icon = new Icon("Resources\\IconImage.png");
}
}
これは、「引数「画像」はアイコンとして使用できる画像でなければなりません」というエラーで失敗しました。
.PNGファイルは実際には.ICOである必要があると思いますが、変換方法がわかりませんでした。この推定は正しいですか、それとも別の問題がありますか?
VSを起動し、新しいWindowsアプリケーションを起動します。プロパティシートを開き、.pngファイルをリソースとして追加します(この例ではglider.png)。これ以降、WindowsFormsApplication10.Properties.Resources.gliderとしてビットマップファイルとしてリソースにアクセスできます。
アプリケーションアイコンとして使用するためのコード:
public Form1()
{
InitializeComponent();
Bitmap bmp = WindowsFormsApplication10.Properties.Resources.glider;
this.Icon = Icon.FromHandle(bmp.GetHicon());
}
その質問に対するモデルの答えは次のとおりです。
System.Console.WriteLine("Are you serious?");
System.Console.WriteLine("I think I will try my chances with another employer.");
これは、GoogleやStack Overflowなどのリソースを使用して、数分でコンピューターの前で解決できるようなものです。このようなタスクを解決しても、優れた開発者であるかどうかはほとんどわかりません。
Icon.FromHandleはPNGで問題を引き起こします。このタイプの問題は this one のようなライブラリで解決できます。
可能性は彼らがその方法を知らず、潜在的な従業員から答えを絞り込もうとしていたことです。さらに、PNGからフォームのアイコンを設定することは、パフォーマンスに大きな影響を与えます。そもそもICOであったはずです。
ここに行く:
そしてここ:
Paint.NET icoプラグイン (無料)
Paint.NETをインストールします。 icoプラグイン(2番目のリンク)をPaint.NET\FileTypesフォルダーに配置します。 Paint.NETを起動します。 .pngを開き、.icoとして保存します。
無料で簡単。
C#2.0 Convert Bitmap to Iconの主題に関する優れたリソース。
すべてのリソースがPNGファイルだったので、これは私の目的のために機能しました:
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = CharSet.Auto)]
extern static bool DestroyIcon(IntPtr handle);
// From http://msdn.Microsoft.com/en-us/library/system.drawing.bitmap.gethicon.aspx
private Icon bitmapToIcon(Bitmap myBitmap)
{
// Get an Hicon for myBitmap.
IntPtr Hicon = myBitmap.GetHicon();
// Create a new icon from the handle.
Icon newIcon = Icon.FromHandle(Hicon);
return newIcon;
}