2014-04-14 25 views
-1

我的應用程序中有幾個字體組合框。VB.NET自動化組合框項目繪圖

我可以從單個子內啓動它們,即:

Public Sub InitFontCombo(ByVal uCombo As ComboBox) 

     uCombo.DrawMode = DrawMode.OwnerDrawFixed 
     uCombo.Font = New Font("Microsoft Sans Serif, 11.25pt", 11.25) 
     uCombo.ItemHeight = 20 
     Dim objFontFamily As FontFamily 
     Dim objFontCollection As System.Drawing.Text.FontCollection 

     objFontCollection = New System.Drawing.Text.InstalledFontCollection() 
     For Each objFontFamily In objFontCollection.Families 
      modControls.ComboAddItem(uCombo, objFontFamily.Name) 
     Next 

    End Sub 

但是,我仍然需要到DRAWITEM調用每個表單是這樣的:

Private Sub cboFont_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles cboFontName.DrawItem 

     e.DrawBackground() 
     If (e.State And DrawItemState.Focus) <> 0 Then 
      e.DrawFocusRectangle() 
     End If 
     Dim objBrush As Brush = Nothing 
     Try 
      If e.Index > -1 Then 
       objBrush = New SolidBrush(e.ForeColor) 
       Dim sFontName As String = Me.cboFontName.Items(e.Index).ToString 
       Dim nFont As Font = Nothing 
       Dim nFontFamily = New FontFamily(sFontName) 
       If nFontFamily.IsStyleAvailable(FontStyle.Regular) Then 
        nFont = New Font(nFontFamily, 14, FontStyle.Regular) 
       ElseIf nFontFamily.IsStyleAvailable(FontStyle.Bold) Then 
        nFont = New Font(nFontFamily, 14, FontStyle.Bold) 
       ElseIf nFontFamily.IsStyleAvailable(FontStyle.Italic) Then 
        nFont = New Font(nFontFamily, 14, FontStyle.Italic) 
       End If 
       e.Graphics.DrawString(sFontName, nFont, objBrush, e.Bounds) 
      End If 
     Finally 
      If objBrush IsNot Nothing Then 
       objBrush.Dispose() 
      End If 
      objBrush = Nothing 
     End Try 

    End Sub 

是否有某種方式來自動執行這兩個調用? 或者我需要把組合框放在一個用戶控件中,並在那裏做一切?

+0

什麼是一個嘗試沒有捕獲點?你是否希望有一個處理多個CBO的過程,這些過程可以處理*不同的*形式或相同的形式 - 你可以將多個控件掛接到單個事件處理程序:只需擴展事件過程中的'Handles ....'子句 – Plutonix

+0

@Plutonix 1)我沒有寫這個代碼,但我也沒有看到有沒有嘗試沒有抓住有什麼問題。你想說啥? 2)字體組合不在相同的形式。 – tmighty

回答

0

如果你想從多個控件相同的自定義行爲,那麼你應該創建一個自定義控件。聲明一個名爲FontComboBox的新類,並讓它繼承ComboBox類。然後,您將把初始化放入課程中,並覆蓋班級中的OnDrawItem方法,而不是處理外部的DrawItem事件。