【入門編】Splitterコントロールとパネル分割:ユーザーが自由に変更できる可変レイアウト画面の保存と復元処理 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク

画面レイアウトを「記憶」させる:SplitContainerの永続化でプロのUIを

こんにちは。現場で鍛え抜かれたシステムアーキテクトです。

VB.NETでのWindows Forms開発、楽しんでいますか? マクロの記録から一歩踏み出し、自分だけのアプリケーションを作り始めたとき、多くの人が最初にぶつかる壁が「画面のレイアウト」です。

「ユーザーが画面の幅を広げたのに、次に開くと元に戻ってしまう…」

これでは、せっかくの柔軟なUIも台無しですよね。今回は、`SplitContainer`という強力な武器を使いこなし、ユーザーの操作を「記憶」して次回起動時に「復元」するという、現場で即戦力となるテクニックを伝授します。

—

1. SplitContainerは「境界線」に注目せよ

`SplitContainer`は、フォームを2つのパネルに分割し、その境界(スプリッター)をユーザーがマウスでドラッグして動かせるコントロールです。

このコントロールの本質は、`SplitterDistance`(分割位置)というプロパティにあります。ここを制御するだけで、画面のレイアウトは自由自在です。

ここが落とし穴!よくあるエラー

初心者がやりがちなのは、「フォームがロードされた瞬間に`SplitterDistance`をいじってしまう」こと。フォームの初期化が終わる前に値を代入しようとすると、レイアウトが崩れたり、エラーになったりします。

鉄則: 位置の復元は、フォームの表示が完了したタイミング(`Load`イベントの最後など)で行うのが安全です。

—

2. 実装のステップ:設定を「保存」する場所

では、具体的にどうすれば「次回起動時」に覚えていられるのでしょうか。最も簡単なのは、Visual Studioが用意している「My.Settings(ユーザー設定)」を使う方法です。

手順

1. ソリューションエクスプローラーで「プロジェクトのプロパティ」を開く。
2. 「設定」タブを選択。
3. 名前を `SplitterPos`、型を `Integer` に設定する。

これで、プログラムの実行終了後も値がハードディスクに書き込まれるようになります。

—

3. 実践コード:魔法の数行

それでは、実際にコードを書いていきましょう。以下のコードをフォームに実装してください。

Public Class Form1
‘ フォームが読み込まれた時に、以前の幅を復元する
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
‘ 設定ファイルに値があれば、その値をSplitterDistanceに代入する
‘ 0の場合はデフォルト値として200を指定
Dim savedPos As Integer = My.Settings.SplitterPos

If savedPos > 0 Then
SplitContainer1.SplitterDistance = savedPos
End If
End Sub

‘ フォームが閉じる直前に、現在の幅を保存する
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
‘ 現在の分割位置をMy.Settingsに格納
My.Settings.SplitterPos = SplitContainer1.SplitterDistance

‘ 設定を確実に保存する
My.Settings.Save()
End Sub
End Class

コードの解説

  • `My.Settings.SplitterPos`: ここが保存場所です。VB.NETではこのオブジェクトを使うだけで、面倒なファイル書き込み処理を自動的にやってくれます。
  • `FormClosing`イベント: ユーザーが×ボタンを押した瞬間、最後に今の位置を記録して保存する。これが「次に開いたときも同じ」を実現する鍵です。

—

4. プロの視点:さらなる高みへ

この実装だけでも十分素晴らしいのですが、もしあなたが「完璧」を目指すなら、次の点も考慮してみてください。

1. 最小・最大値の制限: ユーザーが極端に狭くしすぎるとUIが崩れます。`SplitContainer1.Panel1MinSize` などを設定しておきましょう。
2. イベントの活用: ユーザーが操作した瞬間に保存したい場合は、`SplitContainer1.SplitterMoved` イベントを使います。ただし、頻繁な書き込みはパフォーマンスに影響するため、基本は終了時に保存するのが賢いエンジニアのやり方です。

—

まとめ:ここをクリアすれば、もう初心者じゃない!

今回のポイントをおさらいしましょう。

  • `SplitterDistance` が境界線の位置を決める。
  • `My.Settings` を使えば、データの保存は驚くほど簡単になる。
  • `FormClosing`イベント を活用することで、アプリケーション終了時に「記憶」させる。

これができれば、あなたのアプリケーションは「使い捨てのツール」から「ユーザーに寄り添うソフトウェア」へ進化します。

プログラミングは、こうやって一つずつ「できること」を増やしていくゲームです。今日の技術を習得したあなたなら、次は画面のサイズ保存や、表示色のカスタマイズなども簡単に実装できるはずですよ。

また次の極限の知見でお会いしましょう!応援しています。

タイトルとURLをコピーしました