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 件のコメント:
コメントを投稿