2011-02-01 69 views
0

這裏就是我做的:自定義Windows的外觀窗體組合框

Public Class ComboBox 
    Inherits System.Windows.Forms.ComboBox 

    Public Sub New() 
     SetStyle(ControlStyles.OptimizedDoubleBuffer _ 
     Or ControlStyles.UserPaint, True) 
    End Sub 

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) 
     e.Graphics.FillRectangle(gradient, ClientRectangle) 
     // The preceding line is a simplification of about 50 lines of code. 

     If Not String.IsNullOrEmpty(Text) Then 
      Dim rect As New Rectangle(2, 0, Width - 2, Height) 

      Using format As New StringFormat() 
       format.LineAlignment = StringAlignment.Center 

       Using brush As New SolidBrush(ForeColor) 
        e.Graphics.DrawString(Text, Font, brush, rect, format) 
       End Using 
      End Using 
     End If 

     e.Graphics.FillPolygon(Brushes.Black, New Point() { _ 
     New Point(Width - 5, Height \ 2 - 1), _ 
     New Point(Width - 12, Height \ 2 - 1), _ 
     New Point(Width - 9, Height \ 2 + 3)}) 
    End Sub 
End Class 

我有兩個問題:

  1. 它的高度始終是24
  2. 下拉列表的下降呈現與一個醜陋的Windows 3.1字體。

http://i56.tinypic.com/w1p4ph.png

+0

你想做什麼?爲什麼你不能使用常規的ComboBox? – Justin 2011-02-01 14:45:18

+0

該公司聘請了一位藝術家。他畫了東西。現在我必須執行它。 (之前你問:我不能使用WPF。) – 2011-02-01 14:56:17

回答

0

您的問題顯然是在 「代碼全」 的一部分。我建議您一次解決一個問題:

1)高度問題:會不會是你的高度設置爲24,如果你改變德高度控制將相應調整?你看過Control.PreferredSize屬性嗎?在這裏尋找這樣的:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.preferredsize.aspx

2)字體問題。如果不查看代碼,這是無法診斷的。我所能說的只是確保你正在使用任何你想使用的字體來繪製下拉元素。

0

高度問題幾乎可以肯定,因爲您是從ComboBox繼承,然後使用標準API調用來繪製大部分內容,並且當Windows繪製組合框時,高度由字體大小和對高度的任何更改修復財產被忽略。

同樣,Windows正在因爲你不改變它或API調用的地方設置它使用默認字體。當涉及到繼承和做一些小的修改

組合框是不完全友好。您可能必須完全提供您自己的自定義實現,這也不是微不足道的。您可能無法找到第三方自定義控件來呈現您想要的任何內容。你的公司犯了一個藝術家的演出沒有實際考慮可用的控制等錯誤。對不起...