- PR -

ユーザコントロールについて(VB2005)

投稿者投稿内容
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2007-05-15 21:43
諸農です。

ユーザーコントロールの作り方ですが、Panelをかましてみては如何ですか?
但し、デザイナ設計時にコントロールを配置する順番を間違えないでください。

手順
ユーザーコントロール上にSplitContainerを貼り付ける前にPanelを貼り付けます。
PanelのDockをBottomにセットします。
Panel上にボタンを配置します。
ユーザーコントロール上にSplitContainerを貼り付けます。
Panelが占有している領域を残してFillされていることを確認します。
SplitContainerにTreeViewとDataGridViewを配置します。

この順序でどうでしょうか。

私の環境での実験的結果なんですが、最初にユーザーコントロール上にSplitContainerを配置してしまうと、Dock=noneにしてまたFillに戻してしまうと、SplitContainerの後に配置したPanelコントロールの上に覆い被さってしまいました。もしかするとボタンだけの時も同じかも知れません。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-05-15 22:53
お返事ありがとうございます。

>ユーザーコントロール上にSplitContainerを貼り付ける前にPanelを貼り付けます。
>PanelのDockをBottomにセットします。
>Panel上にボタンを配置します。
>ユーザーコントロール上にSplitContainerを貼り付けます。
>Panelが占有している領域を残してFillされていることを確認します。
>SplitContainerにTreeViewとDataGridViewを配置します。
丁度その逆で、Panalの上にSplitContainerを貼り付けて、やっぱりうまくいかないという結果を得ていました。
今は自宅なので試せませんが、明日の朝一番でやってみます。
何か、その方法ならうまくいきそう(というか、いってくれないと困る・・・)です。
明日やってみて、結果を報告します。
ありがとうございます。
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2007-05-16 00:01
引用:
Jubeiさんの書き込み (2007-05-15 19:29) より:

「4.jpg」の上下を比較するとユーザーコントロールのボタンを含めた高さよりもタブコントロールの高さが足りない

引用:
フォーム側のInitializeComponent()メソッド内のタブページ

引用:
タブページのAutoScrollをtrueにセットすることでスクロールバーが出ませんか?


 解釈の適切さ痛み入ります。


 んー。

実行時のスナップショット:
グリッドの横スクロール切れてない? = ボタンがクライアント領域外に逃げてない?

と、いう点から
直観的に Dock と Anchor のデザイン関係だと思ってたのですが、ハズしてましたか。

 ぐすん。
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-05-16 09:52
おはようございます。

>手順
>ユーザーコントロール上にSplitContainerを貼り付ける前にPanelを貼り付けます。
>PanelのDockをBottomにセットします。
>Panel上にボタンを配置します。
>ユーザーコントロール上にSplitContainerを貼り付けます。
>Panelが占有している領域を残してFillされていることを確認します。
>SplitContainerにTreeViewとDataGridViewを配置します。

やってみたところ、SplitContainerがPanelの上に覆いかぶさってしまい、同じ結果でした。残念です。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2007-05-16 10:29
諸農です。

引用:

やってみたところ、SplitContainerがPanelの上に覆いかぶさってしまい、同じ結果でした。残念です。



設計時には被さらない、のですね。
実行時にPanelコントロールの上にSplitContainerが被さるのですね。
アンカーの設定は変えていませんね?(TopとLeftのまま)

根本的な解決ではないですが、最初に上下分割のSplitContainerを配置して、上側にSplitContainerをもう一つ配置して、下側にパネルを配置してその上にボタンを配置してみてはどうですか。もしくはTableLayoutコントロールを使うとかなど。

開発環境というのはえりさんの端末だけですか?
こちらでは再現できないので、もし他にも開発環境があるのであれば、そちらでも確認できませんか。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-05-16 11:42
こんにちは。
ありがとうございます。

>設計時には被さらない、のですね。
>実行時にPanelコントロールの上にSplitContainerが被さるのですね。
>アンカーの設定は変えていませんね?(TopとLeftのまま)
PanelとSplitContainerの組み合わせの場合、設計時にもSplitContainerがPanelを覆ってしまいます。

>根本的な解決ではないですが、最初に上下分割のSplitContainerを配置して、上側に>SplitContainerをもう一つ配置して、
>下側にパネルを配置してその上にボタンを配置してみてはどうですか。もしくは>TableLayoutコントロールを使うとかなど。
やってみました。
こうすると、確かにSplitContainerが全体を覆ってしまうことは無くなるのですが、実行時にフォームのサイズを変えたりすると、それに合わせて、下段にあたる部分の高さも変わってしまいます。(ボタンの配置しているパネルの部分の高さは常に一定で、GridやTreeを表示しているパネルの方だけフォームの大きさに応じて調整されるようにしたいのですが・・・)

>開発環境というのはえりさんの端末だけですか?
>こちらでは再現できないので、もし他にも開発環境があるのであれば、
>そちらでも確認できませんか。
VB2005が入っているのは、私だけなので、今すぐには他のPCで試すことができません。
一度、家のPCにVB2005をインストールして、再現するか確かめたいと思います。
(私のPCでのみ起きる症状だとしたら、再インストールということになりますね・・・。)
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2007-05-16 12:06
諸農です。

引用:

PanelとSplitContainerの組み合わせの場合、設計時にもSplitContainerがPanelを覆ってしまいます。



うまく伝わっていなかったようです。

最初にPanelを配置して、DockをBottomに設定する。
その後にSplitContainerを配置する。
SplitContainerはデフォルトがDock=Fullなのですが、最初にパネルが下部の領域を占有しているので覆い被さらないはずです(私の環境ではそうでした)。
ですので、まずは設計時に覆い被さらない状況になるのを確認してください。

上記とは別に、これまで色々と確認していただいていますが、設計時では小さいサイズでデザインしてコントロールのアンカーを上下左右の全部にセットしていて、実際の実行時にはサイズが大きくなる様な状況だと、アンカー設定されたコントロールがユーザーコントロール内で覆い被さるような現象が起こると思うのですが、そう言うことではないですよね?アンカーはTopとLeftで試されていますよね?また、3.jpgの状況としてSplitContainerがタブページを超えてフォームにまで進出しているというわけではないですよね?

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
えり
常連さん
会議室デビュー日: 2007/04/27
投稿数: 29
投稿日時: 2007-05-16 12:58
こんにちは。
ありがとうございます。

>うまく伝わっていなかったようです。
>最初にPanelを配置して、DockをBottomに設定する。
>その後にSplitContainerを配置する。
>SplitContainerはデフォルトがDock=Fullなのですが、
>最初にパネルが下部の領域を占有しているので覆い被さらないはずです
>(私の環境ではそうでした)。
>ですので、まずは設計時に覆い被さらない状況になるのを確認してください。

私が文章をうまく理解できていなかったようで、
PanelとSplitContainerの組み合わせで、期待通りの表示になりました。
おかげで助かりました。
本当にありがとうございます。

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