- - PR -
【C#(VS2005)でForm上にFormを貼り付ける方法】
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-04 16:33
いつもお世話になっております、
下記方法を探しています。 ・C#(VS2005)でFormにFormを貼り付ける方法 親Form上の場所を任意に指定して、 はめ込み合成のように子Formを貼り付ける方法。 ●条件 ・親Formを移動すると、当然一緒に移動する ・親Formを最小化すると、当然一緒に最小化する などです。 Form.Owner、Parentプロパティ共に設定しましたができませんでした。 (Parentは、例外でした...) ご存知の方いらっしゃいましたら、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2007-09-04 16:50
MDI のことでしょうか?
| ||||||||
|
投稿日時: 2007-09-04 17:11
"はめ込み合成" とあるので MDI アプリケーションではないと見ました。
簡易なものだとこれが限界です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-09-04 17:34
一応言っておこう。
MDI もしくは ユーザーコントロールではだめなのか? | ||||||||
|
投稿日時: 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.共通コントロールではないこと 以上です、回答ありがとうございます。 | ||||||||
|
投稿日時: 2007-09-04 18:18
短絡的にToolStripコントロールの方がいいんじゃ?とも思いましたが。 追加する親コントロールをPanelにすれば可能です。 | ||||||||
|
投稿日時: 2007-09-04 18:30
TopLevel プロパティの意味を取り違えていないでしょうか? いわゆる ZOrder もしくは TopMost だと思っておりませんか? Form も Control ですので Panel に Controls.Add することができます。 そして私もやはり Form でやろうとする意味がわかりません。
1. に関しては Dock プロパティや Anchor プロパティでズレを防ぐことができると思います。 2. に関してはちょっと意味がわからないです。 Form が共通コントロールというのは聞いたことがないです。 私たちが口にするユーザーコントロール == System.Windows.Forms.UserControl からの拡張コントロール 私たちが口にするフォーム == System.Windows.Forms.Form からの拡張コントロール ですので、ちょっと意味がわからないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-09-04 19:01
皆様、回答ありがとうございます。
『ユーザコントロール』か『拡張Form』かについてですが、 どうも私の関わった開発PJで行われていた(考え方)で説明しているので 一般的な手法でないのは、その影響だと思います。 私の(教わった)考え方では、 『ユーザコントロールは、共通して使用するコントロールを作成する場合に使用する』 ということだったのですが、一般的に間違っているということですね。 (この辺は適宜補正していこうと思います、ご指摘ありがとうございます。) 本題ですが、Formの上に『いろいろなコントロールを配置したもの』 を貼り付けられればOKですので、Panelのユーザコントロールでも ズレさえなければなんら問題はなさそうです。 また、Panel.Controls.Addでできました。 >TopLevel プロパティの意味を取り違えていないでしょうか? >いわゆる ZOrder もしくは TopMost だと思っておりませんか? そのつもりでした。が、違うようですね。 >親フォームがデスクトップ ウィンドウであるウィンドウ ということですね。 今回は、勉強がてらユーザコントロールを使用してみようと思います。 以上、ご指摘ありがとうございました。 |