カスタムコントロールのデザイン時動作 の変更点
更新- 追加された行はこの色です。
- 削除された行はこの色です。
- プログラミング/C#/カスタムコントロールのデザイン時動作 へ行く。
- プログラミング/C#/カスタムコントロールのデザイン時動作 の差分を削除
[[公開メモ]] * やりたいこと [#yc9b2862] カスタムコントロールのデザイン時の動作をカスタマイズしたい。 具体的には、 - 配列プロパティをコレクションエディタで編集する - ComponentDesigner / ControlDesigner を元に独自のデザイン時動作を行う * とりあえず関係ない部分も含めてメモ [#m3f9a03a] 後で別のページに動かすかも。 ** リソースに埋め込んだカーソルを使う方法 [#ic80703f] http://rararahp.cool.ne.jp/cgi-bin/lng/dotnet/dotnetlng.cgi?print+200212/02120004.txt ~ http://dobon.net/vb/dotnet/programing/vsresource.html ~ - 外部ファイルの中身を丸ごとリソースに埋め込んでおいて、 実行時に byte[] として読み出すことができる - MemoryStream を使って byte[] を Stream にできる - カーソルを Stream から作成することができる この3つを組み合わせて、リソースに埋め込んでおいたカーソルを 以下のように使う。 *** カーソルをリソースに埋め込む [#i919277a] - カーソルは "MyCursor.cur" と言うファイルに入っているとする - [プロジェクト]-[既存項目の追加] から "MyCursor.cur" をプロジェクトに追加する - Properties/Resources.resx を開いておき、ソリューションエクスプローラから "MyCursor.cur" をドロップする - できたアイコンは "MyCursor" という名前になるので、分かりやすいように "MyCursor_cur" に直しておく - "MyCursor.cur" はリソース名の識別子として適当ではないので "MyCursor_cur" としている - Resources.resx の編集画面の上部にある [アクセス制御子] を internal または public にする。 こうしておくと、プロジェクト名 (例えば MyApp) と同名の名前空間に LANG:C# namespace MyApp.Properties{ internal class Resources { ... public static byte[] MyCursor { get; } ... } } というように、Resources というクラスが定義され、 その static メンバーとして MyCursor を byte[] の形で読めるようになる。 デフォルトではアクセス制御が internal になるので、外部アセンブリからは 読み出せない。 アクセス制御は internal / public から選べるのだが、これはすべての リソースに対して一括でしか指定できないみたい? これを外からでも読めるようにするには、Resources.resx の編集画面の 上部にある [アクセス制御子] というのを public にする。 一括じゃなくて各リソースごとに制御できたら便利なのに、と思うのは私だけ? *** プログラムから使う [#m7502975] LANG:C# using System.IO; // MemoryStream using System.Windows.Forms; // Cursor ... Cursor CreateCursorFromResource(byte[] CursorResource) { using(var stream = new MemoryStream(CursorResource)) return new Cursor(stream); } ... Cursor MyCursor= null; ... if(MyCursor==null) MyCursor= CreateCursorFromResource( MyApp.Properties.Resources.MyCursor_cur); Cursor.Current= MyCursor;
Counter: 8403 (from 2010/06/03),
today: 1,
yesterday: 3