- PR -

ユーザーコントロールのサイズ変更について

投稿者投稿内容
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2006-12-21 16:51
はじめまして。開発環境はVB.NET、DB=FirdBirdを使っています。
検索用のユーザーコントロールとして、テキストボックス、ボタン、
データ表示用DataGridViewを貼り付けた複合ユーザーコントロールを
作成しまして、フォームアプリからの実装もOKです。
ですが、フォームアプリのデザイン時に、このコントロールのサイズ変更は
できますが、実行時にユーザーがマウスのドラッグでサイズ変更できるような
イベント、もしくはメソッドなどはありますでしょうか?
ちなみにSplitContainerでは分割線の移動だけは自由にできましたが、
全体のサイズは動かせません。
素人で申し訳ありませんが、何かヒントでもないでしょうか?
ユーザーコントロールを位置指定して表示する関数は以下のように
作成してうまくいっています。
どなたかご教授のほど、よろしくお願いいたします。

Public Sub gfSearchControl(ByVal wForm As Form, ByRef wTextCtrl As Control, ByRef wSrchCtrl As Control)
Dim wX As Long
Dim wRect1 As gtRect
Dim wRect2 As gtRect

Dim buff As System.Text.StringBuilder
Call GetWindowRect(wForm.Handle, wRect1)
buff = New System.Text.StringBuilder
buff.Append("このフォームの現在の座標値" + ControlChars.NewLine)
buff.Append("Top : " + wRect1.Top.ToString() + ControlChars.NewLine)
buff.Append("Left : " + wRect1.Left.ToString() + ControlChars.NewLine)
buff.Append("Bottom : " + wRect1.Bottom.ToString() + ControlChars.NewLine)
buff.Append("Right : " + wRect1.Right.ToString())

Debug.Print(buff.ToString())


Dim buff2 As System.Text.StringBuilder
Call GetWindowRect(wTextCtrl.Handle, wRect2)
buff2 = New System.Text.StringBuilder
buff2.Append("このコントロールの現在の座標値" + ControlChars.NewLine)
buff2.Append("Top : " + wRect2.Top.ToString() + ControlChars.NewLine)
buff2.Append("Left : " + wRect2.Left.ToString() + ControlChars.NewLine)
buff2.Append("Bottom : " + wRect2.Bottom.ToString() + ControlChars.NewLine)
buff2.Append("Right : " + wRect2.Right.ToString())

Debug.Print(buff2.ToString())

wSrchCtrl.Size = New Point(304, 325)


wX = (wRect1.Left - wRect2.Left)
wSrchCtrl.Location = wTextCtrl.Location
wSrchCtrl.Location = New Point(wTextCtrl.Size.Width + 50, wTextCtrl.Location.Y)

End Sub


未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2006-12-21 17:40
VB.NETのバージョンが分からないので合ってるかわかりませんが・・・

ユーザコントロール内部のコントロールを一括でサイズ変更するなら
個々のコントロールにのAnchorプロパティを設定すれば可能だと思います。

もしかしてユーザコントロール内のコントロールを個別にドラッグでサイズ変更
するUIがご希望ですかね?

間違ってたらごめんなさい。
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2006-12-22 09:26
ご返信大変ありがとうございます。
.NETは2005を使っています。

ご指摘のとおり、一括でサイズ変更したいのです。
(内部のコントロールは動かせない仕様です)
フォームを作成して実行すると、マウスのドラッグで
サイズが動かせるような、ユーザーコントロール作成希望です。

個々のコントロールのAnchorプロパティを設定してみます。
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2006-12-22 11:06
何度もすみません・・
個々のAnchorプロパティを変更したのですが、
ユーザーコントロールのサイズは変更しませんでした・・
というか、マウスで選択できないです。
(デザイン時にはもちろん変更できます)

実行時にサイズ変更できるのは、フォームだけ
なのでしょうか?ユーザーコントロールで行えないのでしょうか?

どなたかご教授のほど、よろしくお願いいたします。
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2006-12-22 11:24
ユーザコントロールはメインフォームにAnchorしてますか?

コントロールのAnchorはユーザコントロールのサイズに合わせてコントロールのサイズを
変更しますので、ユーザコントロールのサイズ変更する仕組み(SplitContainer内にAnchor
またはメインフォームにAnchor)は別途必要です。

私のよくやる方法だと・・・
メインフォームにSplitContainerを設定。
ユーザコントロールにコントロールを設定。(コントロールはユーザコントロールにAnchor)
SplitContainer内にユーザコントロールをAnchor
以上でSplitContainerを変化させた時にユーザコントロールのサイズが変わり、同時に
内部のコントロールのサイズも変わるようになります。

新規のプロジェクト作って上記手順を試すのが一番判りやすいかと思います。

[ メッセージ編集済み 編集者: 未記入 編集日時 2006-12-22 11:58 ]
Diosan
常連さん
会議室デビュー日: 2006/07/27
投稿数: 29
お住まい・勤務地: 静岡
投稿日時: 2006-12-22 11:27
はずしていたらごめんなさい。

SplitContainerを使うというのはどうですか。
SplitContainerのSplitPanel1にコントロールを追加して、コントロール自体の
DockプロパティをFillにすれば、マウスのドラッグで大きくしたり、小さく
したりはできると思います。


SplitContainerはすでに使っていたんですね。
ごめんなさい、よく読んでいなかったです。

[ メッセージ編集済み 編集者: Diosan 編集日時 2006-12-22 11:33 ]
りんご
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 51
投稿日時: 2006-12-22 13:37
Diosan、未記入さん、ご返信ありがとうございます。
おっしゃるやり方(別フォームに貼り付けて)でやったらできました。

ただ仕様として、フォーム上にたくさんのテキストボックスがあり、
それぞれ↓押下でユーザーコントロールを表示させて(適応する場所に)
そこで検索を行い、データを選んだらそのユーザーコントロールを非表示にし、
また別のテキストでも同じ動作で、別の検索を行います。
その検索のテーブル名や列名はテキストボックスがGotFocusした時点で
設定しています。

そのテキストボックスで↓押下の時に、SplitContainerを使って
ユーザーコントロールをつけた別フォームを表示することを思ったのですが、
それではその度にフォームを作成しないといけないので、ユーザーコントロール
作成の意味がない・・と社内で決まりました。

1つのフォームで何度もユーザーコントロールを利用して、
さらにサイズを変えたければ、その本フォーム上にSplitContainerを
貼り付けねばならないことになるので、画面だけでも100近くあるので
避けようということになりました。

今回の仕様では、SplitContainerを使えないのですが、
自分ではとても勉強になりました。ユーザーコントロールではなくても
ほかのコントロールに使えますね!

ご返信、大変ありがとうございました。
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2006-12-22 14:03
動いたようでなによりです。

>テキストボックスがあり、
>それぞれ↓押下でユーザーコントロールを表示させて(適応する場所に)

以下スレ違いになりますが。
子フォームにユーザコントロール貼り付けてテキストボックス直下にダイアログで表示すればよいのでは?
(仕様がわからないので、見当外れなこと言ってたらスルーして下さい)

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