- ベストアンサー
フォームがリサイズされた時の各コントロールの位置変更コードについて
教えてください。 前々から疑問だったのですが、VBでフォームをリサイズした場合に それぞれのコントロールもそれに合わせて大きさが変更されたり 移動したりという状態にするには、当然Form_Resizeのコードを 書く必要があると思うのですが、VBでツールを作成される方は 皆さんひとつひとつのコントロールの位置を計算しながら毎回 コードを書いているのでしょうか? OCXなどを使うと、勝手にコントロールの位置を調整してくれるものも ありますが、やはり皆さん自分でコードを書いていらっしゃるのでしょうか? 私が分かるのは、フォームにテキストボックスのみを貼り付けて、 Private Sub Form_Resize() Form1.text1.Top = 0 Form1.text1.Left = 0 Form1.text1.Width = ScaleWidth Form1.text1.Height = ScaleHeight End Sub と書くと、リサイズに合わせてテキストボックスが画面いっぱいにサイズ変更 するというものです。 コマンドボタンとか色々貼り付けた状態ではどのように書けばいいのか いまひとつ分かりません。 皆さんはどのようにされているのでしょうか? 是非是非教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私はいつもそれぞれについてResizeイベントのなかに記述しています。 でも、ScaleWidthプロパティとScaleHeightプロパティは、一種の関数みたいなもので、記述するごとに関数が呼び出されて効率が悪いので、何度も使う場合は Dim SW As Single, SH As Single SW = Me.ScaleWidth: SH = Me.ScaleHeight などとして、変数に置いとくのが良いです。 また、ほかのコントロールの位置や大きさから、あるコントロールの位置や大きさを決める場合もあると思います Text2.Width = Text1.Width このような場合も、1回ごとに関数が呼び出されますから、一時変数に格納するほうが効率が良いです。 このように1つ1つ記述していくのは面倒ですが、コントロール数が多くなると、多少目に見えて違いがわかります。 "ウィンドウの内容を表示しながら移動/大きさ変更" のオプションを選択している場合差が出ます。
その他の回答 (1)
- clavia
- ベストアンサー率50% (5/10)
私もその方法しか知りません。 毎回、計算しています。コントロールが多い場合は、大変ですし、どうもちらついてあまりキレイではないですよね? 画面の左下にボタンが並んでいる場合など、あるひとまとまりのものがある場合は、Frame か PictureBox に格納して、Frame などを移動しています。 また、パフォーマンスは調べていないのでわかりませんが、移動とサイズ変更を伴う場合は、API の MoveWindow 関数を使うのもいいのかもしれません。
お礼
ご回答ありがとうございます。 私はなかなかコントロールのコードが理解できないので、シェアの リサイズコントロールを使っています。 確かに何もしないで貼り付けるだけでコントロールがまとめて移動して くれるので便利なのですが、動きがカクカクしてますし、やはり自分で コードを書いてみたいというのが本音です。 >あるひとまとまりのものがある場合は、Frame か PictureBox に格納して、Frame などを移動しています なるほど、こういう手もあるんですね。 これは全然思いつきませんでした。 一度試してみます。 ありがとうございました!
お礼
ご回答ありがとうございます。 初心者の私には「変数」というのがまだいまひとつピンとこなくて、 いつも Private sub XXXXXXXX() dim aa,bb,cc,dd,ee,ff,gg as string のような感じで、毎回書いています。 効率が悪いのは分かっているのですが、モジュールに宣言しておくとか のところがどうも勉強不足でいまいちです。 ちょっと変数について勉強して、もっと効率の良いコードを書けるように します。