2008-08-05 28 views
27

Tôi có quyền kiểm soát được mô hình hóa trên Hộp tổ hợp Combo. Tôi muốn hiển thị điều khiển sao cho đường viền kiểm soát trông giống như của một tiêu chuẩn Windows ComboBox. Cụ thể, tôi đã làm theo các tài liệu MSDN và tất cả các kết xuất của điều khiển là chính xác, ngoại trừ việc hiển thị khi điều khiển bị tắt.Làm thế nào để hiển thị một điều khiển giống như ComboBox với Visual Styles được kích hoạt?

Chỉ cần rõ ràng, đây là hệ thống có Kiểu trực quan được bật. Ngoài ra, tất cả các phần của điều khiển đều hiển thị chính xác ngoại trừ đường viền xung quanh một điều khiển bị vô hiệu hóa, không phù hợp với đường viền Combo bị vô hiệu hóa màu.

Tôi đang sử dụng lớp VisualStyleRenderer. MSDN gợi ý sử dụng các yếu tố VisualStyleElement.TextBox cho TextBox phần của ComboBox kiểm soát nhưng một tiêu chuẩn khuyết tật TextBox và một tiêu chuẩn khuyết tật ComboBox vẽ hơi khác nhau (một có một đường viền màu xám ánh sáng, bên kia đường viền màu xanh nhạt) .

Tôi làm cách nào để hiển thị chính xác điều khiển ở trạng thái bị vô hiệu?

Trả lời

1

Có bất kỳ phương pháp nào trong số ControlPaint hữu ích cho việc này không? Đó là những gì tôi thường sử dụng cho các điều khiển được hiển thị tùy chỉnh.

8

Tôi không chắc chắn 100% nếu đây là những gì bạn đang tìm nhưng bạn nên xem VisualStyleRenderer trong không gian tên System.Windows.Forms.VisualStyles.

  1. VisualStyleRenderer class (MSDN)
  2. How to: Render a Visual Style Element (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Kể từ VisualStyleRenderer sẽ không hoạt động nếu người sử dụng không có phong cách trực quan được kích hoạt (anh/cô ấy có thể đang chạy 'chế độ cổ điển' hoặc hệ thống tác nhân trước Windows XP), bạn luôn phải có dự phòng cho lớp ControlPaint.

// Create the renderer. 
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{ 
    renderer = new VisualStyleRenderer(
     VisualStyleElement.ComboBox.DropDownButton.Disabled); 
} 

và sau đó làm như thế này khi vẽ:

if(renderer != null) 
{ 
    // Use visual style renderer. 
} 
else 
{ 
    // Use ControlPaint renderer. 
} 

Hy vọng nó sẽ giúp!

Các vấn đề liên quan