私は与えられた幅のコンボボックスを持っています。 データの1行が部分的に隠れている(コンボボックスが狭すぎる可能性があります)場合があります。私はツールチップまたは右クリックのコンテキストメニューを使用して、行全体を表示したいと思います。@ VB.NETのコンボボックスアイテムにツールチップを設定するには?
現在、私が現在持っているか、マウスで渡している行を「キャッチ」する方法が見つかりません。教えてください。
ありがとうございます!
私は与えられた幅のコンボボックスを持っています。 データの1行が部分的に隠れている(コンボボックスが狭すぎる可能性があります)場合があります。私はツールチップまたは右クリックのコンテキストメニューを使用して、行全体を表示したいと思います。@ VB.NETのコンボボックスアイテムにツールチップを設定するには?
現在、私が現在持っているか、マウスで渡している行を「キャッチ」する方法が見つかりません。教えてください。
ありがとうございます!
すべてが表示されるようにDropDownWidth
プロパティを増やしてみましたか?
編集:リスト内の項目に基づいて理想的な幅を検索するには:
var maxLength = 0;
// using the ComboBox to get a Graphics object:
using (var g = Graphics.FromHwnd(comboBox2.Handle)) {
foreach (var item in comboBox2.Items.Cast<string>()) {
var itemLength = g.MeasureString(item, comboBox2.Font);
maxLength = Math.Max((int) itemLength.Width, maxLength);
}
}
if (comboBox2.Items.Count > comboBox2.MaxDropDownItems) {
// correction when ScrollBar is displayed
maxLength += 15;
}
comboBox2.DropDownWidth = maxLength;
私はテストのためComboBox
のDropDown
イベントにこのコードを置きます。 ComboBox
...
あなたの権利は実際には「Item.OnMouseOver」ではありませんが、私はあなたがコンボボックスから頭部、私はおそらく何かを忘れてしまった)...
Julienと同じ方向に行くと、ここでは、コンボボックスがどのように満たされているか(手動で文字列またはデータバインディングを介して)ドロップダウン領域のサイズを変更する一般的な拡張メソッドがあります。
<Extension()> _
Public Sub AutosizeDropDownWidth(ByVal combobox As ComboBox)
Dim longestItem As Integer = 0
Using g = Graphics.FromHwnd(combobox.Handle)
Dim itemsAsText = (From item In combobox.Items _
Select combobox.GetItemText(item))
longestItem = CInt(itemsAsText.Max(Function(text) g.MeasureString(text, combobox.Font).Width))
End Using
' Account for scrollbar
If (combobox.Items.Count > combobox.MaxDropDownItems) Then longestItem += 15
' Resize as needed (but never smaller than the default width)
combobox.DropDownWidth = Math.Max(longestItem, combobox.Width)
End Sub
それを使用するには、あなたは、単に以下...
Private Sub MyCombobox_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyCombobox.DropDown
MyCombobox.AutosizeDropDownWidth()
End Sub
注を行うことができますが、私はこのコード例では、空のコンボボックスのようなコーナーケースをテストしていません。
拡張メソッドとしてはるかに良い、ありがとう!スクロールバーの幅に15の代わりにSystemInformation.VerticalScrollBarWidthを使用することができます。 – Darryl
ありがとう、私はこのプロパティを知らなかった。今質問は、最も長いデータの幅を知る方法です。 –
テキストを測定するには、System.Drawing.Graphics.MeasureStringメソッドを見てください。 – hometoast
注:この例は、ComboBox内の項目が文字列の場合にのみ機能します。データバインディングのためにコンボボックス内の項目が文字列以外の場合は、.Cast()が項目のデータ型に一致するように更新され、.MeasureString()で項目のプロパティを測定する必要があります。コンボボックスのDisplayMember。 –
ckittel