DOBON.NET DOBON.NETプログラミング掲示板過去ログ

2つの質問 MDI と レイヤー?について

環境/言語:[Windows XP, C# .NET, .NET Framework 1.1]
分類:[.NET]

いつもこちらで勉強させて頂いています。

すごく簡単なことかも知れないんですが、お願いします。
質1.MDIで親フォームForm1 -> 子フォームForm2,Form3・・・・
  Form1には、Form2を含む子を表示するメインメニュー
  Form2には、Form3以降を呼び出す14個のOptionButtonメニューを作成
  Form1 からの子のMDIParentは設定できますが、
  Form2 の呼び出しだと子を表示できないのですが・・・。

コード:
  Form1: Form3を表示
   public void menuItem1_Click(object sender, System.EventArgs e) {
    //子フォームの設定
    this.IsMdiContainer = true;
    Form3.GetInstance().MdiParent = this;
    Form3.GetInstance().Show ();
   }
  Form2: Form3を表示
   public void radioButton1_Click(object sender, System.EventArgs e) {
    Form1 form1 = new Form1();
    //子フォームの設定
    form1.IsMdiContainer = true;
    Form3.GetInstance().MdiParent = form1;
    Form3.GetInstance().Show();
   }
  From2,Form3,...:複数のインスタンスを表示させないように破棄状態確認
   private static Form3 form3 = new Form3();
   // インスタンスを返すメソッド
   public static Form3 GetInstance() {
    //破棄されたか確認
    if (form3.IsDisposed ){
     form3= new form3();
     form3.Show ();
    }
    return form3;
   }

質2.よくAdobe系で見かけるラベルや図形を選択すると表示される
  レイヤーって言うんですかね?
  長方形のコーナーに正方形のマスが表示され、それで長方形の
  大きさを拡大縮小できますよね。
  あれって皆さんオリジナルで作ってるんですか?
  それともC# のクラスでサポートなんかしてないんですか?
  何かこれらの情報ありましたら、教えてください。
  
>   Form2: Form3を表示
>    public void radioButton1_Click(object sender, System.EventArgs e) {
>     Form1 form1 = new Form1();
>     //子フォームの設定
>     form1.IsMdiContainer = true;
>     Form3.GetInstance().MdiParent = form1;
>     Form3.GetInstance().Show();
>    }

察するにこのコードは既存のForm1のMDI子ウィンドウとしてForm3を表示することを意図しているものと思いましたので、もしもその通りでしたならば、
>     Form1 form1 = new Form1();
この部分を
>     Form1 form1 = this.MdiParent;
と変更してみてはどうでしょう(もし、そうでないのでしたら最後にform1.Show()を呼び出すことで解決するのではないかと思います)。

>質2
他のベンダーのライブラリにはあるかもしれませんが標準ではないようです。
■No3177に返信(Codingslaveさんの記事)

 Codingslaveさん、早速の返信ありがとうございます。
> 察するにこのコードは既存のForm1のMDI子ウィンドウとしてForm3を表示することを意図しているものと思いましたので、もしもその通りでしたならば、
>>    Form1 form1 = new Form1();
> この部分を
>>    Form1 form1 = this.MdiParent;

 確かに親Form1 の子Form2,Form3,....として表示したいのですが、
 上記の記述では、エラーになってしまうのですが・・・。

> と変更してみてはどうでしょう(もし、そうでないのでしたら最後にform1.Show()を呼び出すことで解決するのではないかと思います)。

 子Form2,Form3...を表示させたいので、form1インスタンスでは、違うような・・・。
 それと訂正です。
  From2,Form3,...:複数のインスタンスを表示させないように破棄状態確認
   private static Form3 form3 = new Form3();
   // インスタンスを返すメソッド
   public static Form3 GetInstance() {
    //破棄されたか確認
    if (form3.IsDisposed ){
     form3= new form3();
     form3.Show (); <= これは削除してください。
    }
    return form3;
   }
 
> >質2
> 他のベンダーのライブラリにはあるかもしれませんが標準ではないようです。
 そうですか?
 では皆さん、自前でお作りなんですね?
 挑戦してみます。

 質1:
  何とか皆様、お知恵をお貸し下さいませ。
  お願い致します。
> >>    Form1 form1 = new Form1();
>>この部分を
> >>    Form1 form1 = this.MdiParent;
> >  確かに親Form1 の子Form2,Form3,....として表示したいのですが、
>  上記の記述では、エラーになってしまうのですが・・・。

失念してました。
>Form form1 = this.MdiParent;
ですね。

DOBON.NET | プログラミング道 | プログラミング掲示板