スキップしてメイン コンテンツに移動

[VB]VB.NETでフォームを動的に生成する

最近、Linux上でプログラミングせずになぜかVisual StudioでVB.NETを使う事が多いので、Linux方面で書くことがあまりないです。なので、今日はVB.NETで動的にフォーム(GUI)を生成する方法をまとめます。



VB.NETで基本となるウィンドウはMeで指定できます。
これはJavaScriptで言うところのWindow.documentオブジェクトみたいなもんですね。
構造自体は、HTMLもJAVA(androidは画面をXMLで指定しますね)もVB.NETも同じで基本的にはレイアウト用のパネルコンポーネントを並べるだけです。言わばHTMLのテーブルレイアウトです。

androidプログラミングだと、XMLで定義する方法とJAVAで定義する方法の2つがありましたが、VB.NETでは全てプログラミングで指定します。Visual StudioにはGUIのエディターが搭載されていますが、あれが出力する最終の成果物は単なるVBのソースコードです。Form1.Designer.vbみたいな名前になっていますのでテキストエディタで開いてみましょう。このファイルはVisual Studioからは直接触れないようになっています。

では肝心の定義の仕方ですが
GUIオブジェクト(Panel、FlowLayoutPanel、TabControlなど)は、controlsオブジェクトを持ちます。このcontrolsオブジェクトに内包させたいオブジェクトをaddしていくだけです。
Dim Panel1 As FlowLayoutPanel = New FlowLayoutPanel()
        Dim btn1 As Button = New Button()
        Panel1.Controls.Add(btn1)

実際にはSizeやLocation、Marginも自前で設定する必要があります。
Dim Panel1 As FlowLayoutPanel = New FlowLayoutPanel()
        Dim btn1 As Button = New Button()
        Dim btn2 As Button = New Button()

        Panel1.Size = New Size(120, 40)
        Panel1.FlowDirection = FlowDirection.LeftToRight

        btn1.Text = "OK"
        btn2.Text = "Cancel"

        btn1.Size = New Size(32, 16)
        btn2.Size = New Size(32, 16)

        btn1.Margin = New Padding(8, 8, 8, 8)
        btn2.Margin = New Padding(8, 8, 8, 8)

        Panel1.Controls.Add(btn1)
        Panel1.Controls.Add(btn2)

FlowLayoutPanelは自動で整列してくれるのでとても便利です。marginをきちんと設定してどんどん利用しましょう。

もちろん、更にFlowLayoutPanelをネストすることも可能です。
Dim Panel1 As FlowLayoutPanel = New FlowLayoutPanel()
        Dim btn1 As Button = New Button()
        Dim btn2 As Button = New Button()
        Dim Panel2 As FlowLayoutPanel = New FlowLayoutPanel()
        Dim btn3 As Button = New Button()
        Dim btn4 As Button = New Button()
        Dim btnSize1 As Size = New Size(80, 24)

        Panel1.Size = New Size(400, 200)
        Panel1.FlowDirection = FlowDirection.LeftToRight

        btn1.Text = "OK"
        btn2.Text = "Cancel"
        btn1.Size = New Size(64, 24)
        btn2.Size = New Size(64, 24)

        btn1.Font = New Font("MS UI GOTHIC", 9)

        btn1.Margin = New Padding(8, 8, 8, 8)
        btn2.Margin = New Padding(8, 8, 8, 8)

        Panel2.Size = New Size(100, 100)
        Panel2.FlowDirection = FlowDirection.TopDown
        Panel2.Margin = New Padding(0)

        btn3.Text = "hoge"
        btn4.Text = "huga"
        btn3.Size = btnSize1
        btn4.Size = btnSize1

        btn3.Margin = New Padding(8, 8, 8, 8)
        btn4.Margin = New Padding(8, 8, 8, 8)

        Panel2.Controls.Add(btn3)
        Panel2.Controls.Add(btn4)

        Panel1.Controls.Add(btn1)
        Panel1.Controls.Add(btn2)
        Panel1.Controls.Add(Panel2)
        Me.Controls.Add(Panel1)

起動してみるとこのような感じになります。

FlowLayoutPanel同士がネストされている様子は背景色を変えてみるとよく分かります。

どんなに複雑なレイアウトも入れ子にするだけで簡単に生成できる動的生成ですが、いかがでしょうか。Visual Studioのフォームエディターが結構優秀なので、見た目に分かりにくい動的生成はかなり大変かも知れませんが、実装上TextBoxを不特定多数配置することになったとか、使い道はきっとあると思います。

今回私は、テキストボックスをレイアウト毎使いまわすためにやり方を調べました。

久しぶりにWindowsでプログラミングしましたが、Visual Studioはよくできていますね。キーボードショートカットさえ覚えれば、そこそこ使えると思いましたがそれが一番問題です…。:-P


コメント

このブログの人気の投稿

[VB.NET]オレオレ証明書でSSL通信するための短絡的な解決法

VB.NETソフトウェアでサーバーと通信することはよくある事だと思いますが、最近はHTTPを使って明けっ広げに刺しに行くよりHTTPSを使って暗号化してこそこそやった方が時代の流れに即した感じですよね(違うか)。 いちいちテスト環境でSSL証明書を用意するのも面倒だということで、セキュリティ的には全くよろしくない方法で迂回できるので紹介します。

[JS]Canvasでよく使う描画テクまとめ

HTMLで画像をいじくりたい時は、canvasを利用して編集するのは一般的ですが、WindowsストアアプリではHTML+CSS+JSでのアプリ開発ができる事もあって、簡単な画像編集であれば、C#やVBを使うより分かりやすいし資料が多く、C++でDirectXをガリガリ書くよりお手軽。入出力もファイルピッカーを使えば簡単に実装できます。今回は、Windowsのコードではなく、Canvasを利用する時のJavaScriptを使いどきに合わせてまとめていきます。

curl の基本的な使い方 -設定編-

今回のcurl TIPSは、curlをより日常的に使っていくためのHow toです。curlには、数多くのオプションが用意されていて、それらを組み合わせる事で様々な事が楽になるでしょう。サービス監視の自動化などにはまさにcurlの得意分野です。 今回は、curlを更に自分のものにしていくために大事なカスタマイズの部分を解説します。