2012-11-04 25 views
5

Xin chào, tôi đã đặt kiểu căn hộ của hộp điều khiển thành phẳng.Combobox borderstyle

Có thể vẽ đường viền xung quanh kiểm soát này không?

Điều khiển không có thuộc tính kiểu đường viền. Mọi lơi đê nghị đêu nên được đanh gia cao. Lưu ý phụ: Tôi muốn giữ căn hộ kiểu phẳng nếu có thể.

+2

Cha mẹ của kiểm soát có thể vẽ đường viền xung quanh nó trong trình xử lý sự kiện Paint của nó. –

Trả lời

6

Đặt nó trong bảng điều khiển, đặt Đường viền trên bảng điều khiển, Đặt hộp cmb trong bảng điều khiển, đặt hộp cmb để gắn đầy và kiểu đường viền phẳng nhưng không quá thanh lịch.

+0

Điều này là đủ cho mục đích của tôi thanx rất nhiều! – p0enkie

13

Tạo điều khiển ComboBox tùy chỉnh và ghi đè phương thức WndProc của nó. Bạn có thể dễ dàng vẽ một biên giới với ControlPaint.DrawBorder phương pháp:

public class ComboBoxWithBorder : ComboBox 
{ 
    private Color _borderColor = Color.Black; 
    private ButtonBorderStyle _borderStyle = ButtonBorderStyle.Solid; 
    private static int WM_PAINT = 0x000F; 

    protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 

     if (m.Msg == WM_PAINT) 
     { 
      Graphics g = Graphics.FromHwnd(Handle); 
      Rectangle bounds = new Rectangle(0, 0, Width, Height); 
      ControlPaint.DrawBorder(g, bounds, _borderColor, _borderStyle); 
     } 
    } 

    [Category("Appearance")] 
    public Color BorderColor 
    { 
     get { return _borderColor; } 
     set 
     { 
      _borderColor = value; 
      Invalidate(); // causes control to be redrawn 
     } 
    } 

    [Category("Appearance")] 
    public ButtonBorderStyle BorderStyle 
    { 
     get { return _borderStyle; } 
     set 
     { 
      _borderStyle = value; 
      Invalidate(); 
     } 
    }  
} 

phương pháp DrawBorder BTW Ngoài ra còn có quá tải, cho phép để thiết lập chiều rộng của biên giới. Sử dụng nó nếu bạn cần.

+1

Tính năng này có hoạt động không? Không thể ghi đè đường viền ComboBox trong sự kiện vẽ. Tôi nghĩ rằng bạn phải ghi đè lên WndProc và tìm kiếm thông điệp sơn không phải của khách hàng. Tất nhiên, sau đó nó flickers khá xấu xí. – LarsTech

+2

Hãy thử mã trước khi bạn đăng. –

+0

@LarsTech bạn nói đúng, số lỗi xấu, cố định của tôi –