FloatingToolStripLibrary for .NET Framework 3.5
TEST目的で524514833454841年位前に書いた古典を上げてみました.
- using FloatingToolStripLibrary; を追加
- フローティング後にToolStripを設置したい場所にToolStripPanel,またはFloatingToolStripGradientPanelを設置する.(両者は背景色にグラデーションが利用できるかどうかの違いしかないのでどっちでもいいです.)
- 例えば2.でデザイナを使って4つ設置していた場合は以下のようにコーディングします.設置するFormのクラス内にコーディングする場合を想定しています.
// 表記めんどくさくてごめんなさい
FloatingToolStrip strip1 = new FloatingToolStrip(
toolStrip1,
new ToolStripPanel[]
{
floatingToolStripGradientPanel1,
floatingToolStripGradientPanel2,
floatingToolStripGradientPanel3,
floatingToolStripGradientPanel4
},
this,
"Toolbar");
第1引数はフローティングさせたい対象のToolStrip
第2引数はフローティング後,ドッキング可能なToolStripPanelの配列
第3引数はToolStripが属するForm
第4引数はフローティングウインドウに表示するテキスト
となります.
もっと簡単にドッキング先を指定できると記述量が減って良さそうですね.いい案があったらほしいです.
また,上の例であれば,
strip1.HideToolStrip();
で非表示に
strip1.ShowToolStrip();
で表示することができます.
strip1.Showing;
で現在表示しているかどうかが取得できます.
適当に何が実装されているかとか書いておきます. どうでもいいやつとかは説明省きます.
本体です.
初期化する際に使用します. 引数として
- フローティングさせたい対象のToolStrip
- フローティング後,ドッキング可能なToolStripPanelの配列
- ToolStripが属するForm
- フローティングウインドウに表示するテキスト を与えてください.
FloatingToolStripを非表示にします.
FloatingToolStripを表示します. 主にHideToolStripによって非表示にされたものに対して使用します.
現在(フローティング状態やドッキング状態を問わず)表示しているかどうかを示しています. 読み込み限定のプロパティです.設定したい場合は上記の2つのメソッドを使用します.
フローティング時のタイトルに表示するテキストを取得または設定します.
ドッキングをする際に,ドッキング先の領域の背景色を取得または設定します. 半透明になるのは仕様です.
ドッキングをする際に,ドッキング先の領域の境界部分の色を取得または設定します.
おまけです.System.Windows.Forms.ToolStripPanelを継承して作成しています. オリジナルとの違いは背景色をグラデーションにできるだけなので無理に使う必要はありません. というか今時ダサいグラデーションしかできないので使わなくていいです.
グラデーションの開始色を取得または設定します.
グラデーションの終了色を取得または設定します.
グラデーションの方向を取得または設定します. System.Drawing.Drawing2D.LinearGradientModeで取得または設定してください.
複数のFloatingToolStripを一括管理するためのクラスです.
ToolStripをベースとしてFloatingToolStripを作成した後,マネージャーへ追加します. もし予めFloatingToolStripを作成している場合は,それらを配列にし,FlatingToolStripsプロパティへぶち込んでください.
その名の通り,Textプロパティが一致するものを検索して返します.見つからなかった場合はnullを返します. 第2引数にインデックスを指定することで,どこから検索するかを指定することができます.
フローティング時にToolStripを乗せているFormです.ライブラリの外部から使われることを想定していないためinternalにしてあります.
ドッキング時に表示される領域を描画するためのクラスです.
Formを継承して無理やり実装しています.上に同じく,ライブラリの外部から使われることを想定していないためinternalにしてあります.