2009年4月4日土曜日1:12:00
ジェネリクス,プロパティ,コントロールの動的配置などなど
シリアライズ、デシリアライズを簡単(笑)にするクラスを、ジェネリクスを用いて作成。意外に時間がかかった。デシリアライズしたオブジェクトから、画像のパスを受け取り、それをPictureBoxで描画させようと思ったけど、そこまでいけなかった。
public class XMLSerializerClass<T> { private T Object_Type; public System.Xml.Serialization.XmlSerializer Serializer; public T ObjectSelf { get { return Object_Type; } set { this.Object_Type = value; Serializer = new System.Xml.Serialization.XmlSerializer(value.GetType()); } } /// <summary> /// コンストラクタ /// </summary> /// <param name="obj"></param> public XMLSerializerClass(T obj) { Serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType()); this.ObjectSelf = obj; } //略 }
このままだと、「常に規定値 null を使用します」と言われてしまうけど。わがんね。
動的に作成したPictureBox5つに、emf画像を読みこませて表示。また、jpg画像も表示させてみた。まえに書いたけど、兄弟のPictureBoxは透過しない。親子なら可能。そのため、赤い丸の周りは、フォームの背景画像が表示されている。PictureBoxで表示したjpg画像は表示されない。すっかり忘れていたけれど。
private PictureBox[] pb; private void createPictureBox() { this.pb = new PictureBox[5]; for (int i = 0; i < pb.Length; i++) { this.pb[i] = new PictureBox(); this.pb[i].Height = 10; this.pb[i].Width = 20; this.pb[i].BackColor = Color.Transparent; // このコントロールをフォームに追加する // これをしないと表示されない this.Controls.Add(this.pb[i]); } } private void loadPicture( string file_name ) { Bitmap bitmap = new Bitmap(file_name); int limit = pb.Length; for (int i = 0; i < limit; i++ ) { this.pb[i].Image = bitmap; this.pb[i].Width = this.pb[i].Image.Width; this.pb[i].Height = this.pb[i].Image.Height; } }
参考サイト
- ジェネリクス ++C++;// 未確認飛行 C
- C# リフレクションまとめ5(ジェネリック型を扱う) Type.GetGenericTypeDefinition Type.GetGenericArguments s-kitaの日記
- プロパティ ++C++;// 未確認飛行 C
- コントロールの配列を作成する C# と VB.NET の入門サイト
- ImageViewerを作る。(その1) 宇宙仮面の C# プログラミング
- 描画の「ちらつき」をなくす 緑のバイク
0 件のコメント:
コメントを投稿