画面レイアウトを「記憶」させる: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`イベント を活用することで、アプリケーション終了時に「記憶」させる。
これができれば、あなたのアプリケーションは「使い捨てのツール」から「ユーザーに寄り添うソフトウェア」へ進化します。
プログラミングは、こうやって一つずつ「できること」を増やしていくゲームです。今日の技術を習得したあなたなら、次は画面のサイズ保存や、表示色のカスタマイズなども簡単に実装できるはずですよ。
また次の極限の知見でお会いしましょう!応援しています。
