ふたつの写真を合成してそのあとに位置関係を変更したい。しかしそのときには画像は一体化しているので2枚の写真の位置関係を変更することはできません。しかしレイヤーにしてしまえば双方は独立しているのでいつでも位置を変更することができます。

重なった2つの長方形が表示されていますが、後ろ側にある長方形を移動させることもできます。

レイヤーを実装するためにはどうすればよいのでしょうか? ここではレイヤークラスを作成します。

次にデザイナで以下のようなものをつくります。フォームの中央にあるのはピクチャーボックスです。Anchorプロパティを設定しているのでフォームの大きさが変更されるとピクチャーボックスの大きさも変更されます。

レイヤーメニューの下側に作成されたレイヤーの名前が並びます。

これはメニューの[新しいレイヤーをつくる]を選択すると新しいレイヤーが生成されます。そしてメニューの[レイヤー]の下に作成されたレイヤーの名前が表示されるようにします。

実際にメニューが生成されるのはメニューの[レイヤー]がドロップダウンされたときです。[レイヤー]メニューにはセパレーターをふたつ作成し、レイヤーの名前はこのあいだに表示されるようにします。そのためには古い項目を削除して現在存在するレイヤーの名前を新しい項目として追加するという方法をとります。

メニューのなかで作成されたレイヤーが選択されたらそれを検知できるようにする必要があります。そこでメニューの項目を作成するときにToolStripMenuItem.Tagプロパティに値をセットして、この項目はどのレイヤーと関連付けられているかがわかるようにしています。

ItemTagクラスを作成してこのインスタンスをToolStripMenuItem.Tagプロパティにセットすることでメニューが選択されたらどのレイヤーが選択されたかわかるようになります。

これがItemTagクラスです。

レイヤーの名称に対応するメニューが選択されたら選択されてたレイヤーがどれか調べます。みつかったら選択されているレイヤーに対応するメニュー項目にチェックマークをつけます。そして選択されているレイヤーをフィールド変数に保存しておきます。

メニューの[選択されているレイヤーに画像を読み込む]が選択されたら選択されているレイヤーに画像を読み込みます。そしてPictureBox.Invalidate()メソッドをよびます。

PictureBox.Invalidate()メソッドが呼ばれたときにおこなわれる処理です。

レイヤーを動かすことができないのであればレイヤーをつくった意味がありません。方向キーで移動させることができるようにしてみます。