C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■87323 / )  Re[5]: パネルとスプリッターを使った時の処理方法
□投稿者/ 魔界の仮面弁士 (1658回)-(2018/05/10(Thu) 17:24:23)
No87308 (夜叉丸 さん) に返信
> panel1の幅200、panel2の幅300をキープしたかったので、

フォームサイズが (150, 150) になったりすると、最小幅を維持できないので、
Form の MinimumSize もセットしておいた方がよいかと思います。


現状だと、Form サイズが小さすぎた場合、
panel1.Width = 200、panel2.Width = 0 になりえますし、
それよりさらに狭くなると、panel1 に押しやられた splitter1 が
マイナス座標に配置されることになりますよね。


> パネルの表示が壊れたり、Splitter1が消えたりします。
現象を再現できなかったので、状況が読みきれていません…。

> フォームを大きくして、panel1の幅をSplitter1を使って広げた後、
> フォームの右端をドラッグしたままフォームの幅を狭くすると
具体的なサイズが分かると、こちらでも状況を追跡できるかも。

(1) Form の Width を幾つまで広げたのか
(2) panel1 の Width をどこまで広げたのか
(3) その後、Form の Width をどこまで狭めたのか



> 壊れないようにするにはどうすればよいのでしょうか?
もしも再配置が追いついていないようであれば、フォームのリサイズが終了した後で、
ResumeLayout を呼び出してみるのはどうでしょう。
https://dobon.net/vb/dotnet/control/suspendlayout.html


No87314 (にゃるら さん) に返信
> 1. まずSplitContainerを配置し、OrientationをHorizontalにする
> 2. 1で配置したSplitContainerの左側のパネルにSplitContainerを配置

1 が Vertical で、2 が Horizontal では無いでしょうか。

Horizontal (水平線) だと上下配置、
Vertical (垂直線) が左右配置ですよね。



No87316 (夜叉丸 さん) に返信
> SplitContainerを使ってやりたいことができました。

SplitContainer なら、Resize イベント等のコーディングも不要で、
 splitContainer1.SplitterWidth = 10
 splitContainer1.Panel1MinSize = 300
 splitContainer1.Panel2MinSize = 200
をデザイン時に設定しておくだけで済むはずです。

それに Splitter をドラッグする際の視覚効果も、最小サイズ以下にならないよう調整されるので、
ユーザビリティ的にも画面設計効率的にも、SplitContainer の方がお奨めです。

VS2005/VS2008 時代の MSDN を見てみると「SplitContainer コントロール (Windows フォーム)」の
解説において、下記のように記されていますしね。

》メモ:
》 ツールボックスでは、以前のバージョンの Visual Studio で使用されていた Splitter コントロールが、
》 このコントロールに置き換えられました。SplitContainer コントロールの優先度は、Splitter コントロールよりも
》 かなり高くなります。Splitter クラスは、既存のアプリケーションとの互換性を確保するために、引き続き
》 .NET Framework に含まれていますが、新しいプロジェクトに対しては、SplitContainer コントロールを
》 使用することを強くお勧めします。

※ VS2017 では機械翻訳ヘルプになってしまったので分かり難い…。
https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/controls/splitcontainer-control-windows-forms
返信 編集キー/


管理者用

- Child Tree -