- PR -

【C#(VS2005)でForm上にFormを貼り付ける方法】

投稿者投稿内容
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2007-09-04 16:33
いつもお世話になっております、

下記方法を探しています。

・C#(VS2005)でFormにFormを貼り付ける方法

親Form上の場所を任意に指定して、
はめ込み合成のように子Formを貼り付ける方法。

●条件
 ・親Formを移動すると、当然一緒に移動する
 ・親Formを最小化すると、当然一緒に最小化する

 などです。

Form.Owner、Parentプロパティ共に設定しましたができませんでした。
(Parentは、例外でした...)

ご存知の方いらっしゃいましたら、よろしくお願いいたします。
よっし〜。
ベテラン
会議室デビュー日: 2007/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2007-09-04 16:50
MDI のことでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-09-04 17:11
引用:

Makotoさんの書き込み (2007-09-04 16:33) より:

親Form上の場所を任意に指定して、はめ込み合成のように子Formを貼り付ける方法。


"はめ込み合成" とあるので MDI アプリケーションではないと見ました。

コード:

    Form2 childForm = new Form2();

    childForm.TopLevel = false;
    this.Controls.Add(childForm);
    childForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    childForm.TransparencyKey = System.Drawing.SystemColors.Control;
    childForm.Show();


簡易なものだとこれが限界です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2007-09-04 17:34
一応言っておこう。

MDI もしくは ユーザーコントロールではだめなのか?
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2007-09-04 18:05

回答ありがとうございます。

To:よっし〜。様

説明不足でした。(MDIではないです。)

下記みたいなことを実現したいと考えています。

●やりたいこと

 MainFormの上側にSubFormを貼り付けて、ツールバーとして利用しようと考えています。

 このときMainForm側で操作する項目により、
 ツールバーとして使用するSubFormを切り換えて表示したいと考えています。
 (SubFormは、異なるものが複数あって位置を固定して切換表示する感じです。)

To:じゃんぬねっと様

 >"はめ込み合成" とあるので MDI アプリケーションではないと見ました。

 お見事な洞察力です、ありがとうございます。
 提示いただいたコードでやりたいことはOKなのですが、
 問題が一箇所あります。

 >childForm.TopLevel = false;

 現在、MainForm上にPanelを配置して、そのPanel上にSubFormを
 はめ込もうと考えています。
 この場合、『childForm.TopLevel = false』を指定すると、
 SubFormはPanelの裏へいってしまいます。
 逆に、『childForm.TopLevel = true;』にすると例外がスローされます...

 なにかうまい方法はあるのでしょうか?
 (Panelを最背面に表示するプロパティってあるんでしょうか?)

>まどか様

 >MDI もしくは ユーザーコントロールではだめなのか?

 上記にあるように、MDIではありません。
 またユーザコントロールも考えたのですが、下記でとりやめています。

  ●とりやめた理由
   1.配置すると表示ズレ、サイズズレが発生すること
   2.共通コントロールではないこと

以上です、回答ありがとうございます。
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-09-04 18:18
引用:

Makotoさんの書き込み (2007-09-04 18:05) より:

ツールバーとして利用




短絡的にToolStripコントロールの方がいいんじゃ?とも思いましたが。

追加する親コントロールをPanelにすれば可能です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-09-04 18:30
引用:

Makotoさんの書き込み (2007-09-04 18:05) より:

現在、MainForm上にPanelを配置して、そのPanel上にSubFormをはめ込もうと考えています。この場合、『childForm.TopLevel = false』を指定すると、SubFormはPanelの裏へいってしまいます。逆に、『childForm.TopLevel = true;』にすると例外がスローされます...なにかうまい方法はあるのでしょうか?


TopLevel プロパティの意味を取り違えていないでしょうか? いわゆる ZOrder もしくは TopMost だと思っておりませんか? Form も Control ですので Panel に Controls.Add することができます。

そして私もやはり Form でやろうとする意味がわかりません。

引用:

・とりやめた理由
 1. 配置すると表示ズレ、サイズズレが発生すること
 2. 共通コントロールではないこと


1. に関しては Dock プロパティや Anchor プロパティでズレを防ぐことができると思います。 2. に関してはちょっと意味がわからないです。 Form が共通コントロールというのは聞いたことがないです。

私たちが口にするユーザーコントロール == System.Windows.Forms.UserControl からの拡張コントロール
私たちが口にするフォーム == System.Windows.Forms.Form からの拡張コントロール

ですので、ちょっと意味がわからないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2007-09-04 19:01
皆様、回答ありがとうございます。

『ユーザコントロール』か『拡張Form』かについてですが、
どうも私の関わった開発PJで行われていた(考え方)で説明しているので
一般的な手法でないのは、その影響だと思います。

私の(教わった)考え方では、

 『ユーザコントロールは、共通して使用するコントロールを作成する場合に使用する』

ということだったのですが、一般的に間違っているということですね。
(この辺は適宜補正していこうと思います、ご指摘ありがとうございます。)

本題ですが、Formの上に『いろいろなコントロールを配置したもの』
を貼り付けられればOKですので、Panelのユーザコントロールでも
ズレさえなければなんら問題はなさそうです。

また、Panel.Controls.Addでできました。

>TopLevel プロパティの意味を取り違えていないでしょうか?
>いわゆる ZOrder もしくは TopMost だと思っておりませんか?

そのつもりでした。が、違うようですね。

 >親フォームがデスクトップ ウィンドウであるウィンドウ

ということですね。

今回は、勉強がてらユーザコントロールを使用してみようと思います。
以上、ご指摘ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)