ToolStripの任意の位置にコントロールを乗せる


■ToolStripに乗せられるToolStripItemには数種類ありますよね(Button、Label、Separator等) それら以外に、任意のコントロールを乗せたいケースの処理について記事にします。 ToolStripへコントロールを追加するには「ToolStrip.Items」のAddメソッドで出来ますが、 任意の場所に挿入するには?・・・辿りつくまでに結構な時間を要してしまった。 答えは、自ら口にしてるのに「挿入」って・・・解決の方法はInsertメソッドですね! Addメソッドに関しては巷のWEBで、ちらほら情報はあるのですが・・・要はListViewやTreeViewと同じ要領です。 今回は、実在するコントロールをそのまま乗せる、ちょっと強引な手法を紹介させて頂きます。 この方法であれば、ToolStripからコントロールを取得してプロパティを読む等の回りくどい処理はせずに済みますし、 予めイベントプロシージャへのコーディングも可能です。。。(あくまでも影響の範囲は自己責任で)

今回は「DateTimePicker」を乗せた例を記述します。

 ' 丁寧な例
 Dim objcnt As New ToolStripControlHost(DateTimePicker1)
 ToolStrip1.Items.Insert(index, objcnt)

 ' いきなり放り込む例
 ToolStrip1.Items.Insert(index, New ToolStripControlHost(DateTimePicker1))
上記コードの「index」が挿入される位置になります。 上記2例、どちらも結果は同じですが、宣言して何かしら処理をする場合は、まず宣言しておいた方が良いでしょう。 はじめに「ToolStripControlHost」で、任意のコントロール、この場合「DateTimePicker1」をToolStripの仲間にしておき「Insert」するわけです。 補足すると、「index」の値が無効な場合でも、特にエラーは出ず、シレっと通り過ぎます。(挿入には失敗しますので、ご注意を) 「DateTimePicker1」は、予めFormデザイナで、Form内の何処かに配置されていることが前提で、 プロパティなどを設定しておいても良いです。 お恥ずかしい話し、筆者は「DisplayIndex」みたいなモノをイメージしておりまして、 「Add」してから動かそうとしてたのですが・・・探せど探せど? そんな情報は見つからず、よくよく考えてみれば「Insert」って無いの?と、ようやく気付く始末・・・ 無事、解決の運びとなったわけです。。。


関連リンク(情報源)

https://msdn.microsoft.com/ja-jp/library/9k5etstz(v=vs.110).aspx

TOP ▲