[#fd7b9ead]#column(注意){{この記事の最新版は「[[フォームやコントロールの形を変える>http://dobon.net/vb/dotnet/form/formregion.html]]」及び「[[フォームウィンドウの特定の色を透明にする>http://dobon.net/vb/dotnet/form/transparencykey.html]]」で公開しています。}}フォームの形を四角(矩形)以外の形に変える方法としてここでは、Control.Regionプロパティを使う方法と、Form.TransparencyKeyプロパティを使う方法の2つを紹介します。Control.Regionプロパティを使った方法から。形を変えたいフォームのRegionプロパティに、その形状を示したRegionオブジェクトを指定することにより、フォームの形を変えることが出来ます。次の例はフォームをドーナッツ型にするコードです。ここではフォームのLoadイベントハンドラ内にコードを書いていますが、コンストラクタ内の適当な位置などに記述してもかまいません。Region(myGraphicsPath);}}}次の例はフォームの形を文字(この例では"DOBON!")にするものです。Region(myGraphicsPath);}}}そのほかの形に変える例につきましては、下のURLをご覧ください。-[[フォームやコントロールの形を変える>http://dobon.net/vb/dotnet/form/formregion.html]]次にForm.TransparencyKeyプロパティを使ってフォームの形を変える方法を紹介します。Windows2000以降のOSであれば、Form.TransparencyKeyプロパティにより、フォームで透明にしたい色を指定できます。このTransparencyKeyを使うことにより、自由な形のフォームを簡単に作れそうです。フォームの形としたい形が描かれた画像ファイルを用意し、フォームにその画像を描画し、画像の背景色をフォームのTransparencyKeyに指定する訳です。残念なことに実際にはそう簡単にはいきません。Color(32ビット)」の時はTransparencyKeyに指定した色でも透明になりませんでした。(環境により違いがあるかもしれません。Colorの時でも成功するようになりました。フォームの背景色を透明にしたい色にし、フォームのTransparencyKeyにもその色を指定します。フォームの形に使う画像ファイルはBitmapオブジェクトとして読み込み、MakeTransparentメソッドにより、透明にしたい色(背景色)を透明色にします。(透明色を指定して保存したGif画像を使うという手もあります。)画像をフォームに描画するには、BackgroundImageプロパティを使わずに、フォームのPaintイベントハンドラで描画するようにします。(この方法がすべての環境でうまく行くか分かりませんので、情報をいただければ助かります。)次の例ではフォームの形を"form.bmp"という画像ファイルに保存し、これを使ってフォームForm1の形を作っています。ここでは白を透明色としています。[#y1303da9]#column(注意){{この記事の最新版は「[[メールのサブジェクトをデコードする>http://dobon.net/vb/dotnet/internet/decodemailsubject.html]]」で公開しています。}}''質問:''受信したメールのSubjectをデコードしたいのですが、どのようにすればよいのでしょうか?例「=?ISO-2022-JP?B?GyRCJCIkMSReJDckRiQqJGEkRyRIJCYhKhsoSg==?=」''答え:''ちゃんとしたものを作るにはRFC2047の知識が必要になると思いますが、「とりあえず」的なもの(Base64形式のみ対応)であれば、次のような簡単なコード(メソッド)で実現できます。Exception("未対応のエンコード形式です。Exception("未対応のエンコード形式です。[#b29109d6]#column(注意){{この記事の最新版は「[[フォームが閉じられる時その原因を知る>http://dobon.net/vb/dotnet/form/unloadmode.html]]」で公開しています。}}''質問:''VB6のQueryUnloadイベントにおけるUnloadModeのように、フォームが閉じられる時にどうしてフォームが閉じられようとしているのか(ウィンドウのCloseボタンのクリックにより閉じられようとしているのか、コードのCloseメソッドにより閉じられようとしているのか等)知るにはどのようにすればよいのでしょうか?''答え:''これにはいくつかの方法があるようです。一つ目は、フォームのWndProcメソッドをオーバーライドし、送られてくるメッセージを調べるという方法です。次の例では、WM_ENDSESSION、WM_SYSCOMMAND、WM_CLOSEが送られてきたか調べ、フォームが閉じられる原因がOSのシャットダウンによるか、Xボタンやコントロールメニューによるか、コードによるか判断しています。Form.Closing...>http://www.gotdotnet.com/Community/MessageBoard/Thread.aspx?id=40651]]ここで紹介されているYeahIGotDotNetさん、MikeWill34さんの書いたコード及び、CodeProjectで紹介されているEvilDoctorSmithさんのコードを参考にさせていただき、次のようなコードを書いてみました。詳しくは上記URLをご覧ください。windowを使った方法です(一番目の方法を拡張したような感じです)。この方法につきましては、下記URLで紹介されていますので、興味のある方はご覧ください。