2009-07-15 101 views
1

我有一個給定寬度的組合框。 可能會出現一行數據部分隱藏(組合框可能太窄)。我想通過使用工具提示或右鍵單擊上下文菜單來顯示整行。如何在VB.NET中設置工具提示到組合框?

目前我無法找到如何「捕捉」我當前正在使用或通過鼠標傳遞的行。請告訴我。

在此先感謝!

回答

2

您是否嘗試過增加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; 

我把這個代碼在DropDown事件ComboBox進行測試。也許你可以找到一個更好的地方,如填充後ComboBox ...

+0

謝謝,我不知道這個屬性。現在的問題是如何知道最長數據的寬度。 – 2009-07-15 14:45:32

+1

要測量文本,請查看System.Drawing.Graphics.MeasureString方法。 – hometoast 2009-07-15 14:59:29

0

你是對的,真的不是一個「Item.OnMouseOver」,但我想你可以(關閉我的頂部頭,所以我可能已經忘了什麼)......從組合框

  • 繼承,
  • 覆蓋的OnDrawItem(您可能需要將變化.DrawMode爲「自畫」)。
    • 你會知道哪個項目懸停在EventArgs的OnDrawItem事件/覆蓋中。
  • 在此處設置控件上的工具提示。
  • 可選地設置一個計時器,以手動顯示工具提示,如果上述不自動工作。
1

在朱利安去同一個方向走,這裏是一個通用的擴展方法,將調整下拉區域無論組合框的填充方式(手動字符串或通過數據綁定)。

<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 

注意,我沒有測試角落情況下,像在這個代碼示例一個空的組合框。

相關問題