Tôi có thể thay đổi giao diện của Hộp tổ hợp Winforms sao cho Combobox có DropDownStyle = DropDownList
trông giống như một hộp là DropDownStyle = DropDown
. Sự khác biệt chức năng giữa chúng là trước đây không cho phép người dùng nhập giá trị, vấn đề là màu mặc định của nó trông có màu xám và không khớp với hộp văn bản trên cùng một hộp thoại.Xuất hiện hộp kết hợp
Trả lời
bạn có thể nhận được DropDown
xuất hiện từ DropDownList
kiểu bằng cách thay đổi DrawMode
thuộc tính thành DrawMode.OwnerDrawFixed
và xử lý mục vẽ một mình (may mắn thay, thật dễ dàng). Lớp mẫu, triển khai ý tưởng này:
public class ComboBoxEx : ComboBox
{
public ComboBoxEx()
{
base.DropDownStyle = ComboBoxStyle.DropDownList;
base.DrawMode = DrawMode.OwnerDrawFixed;
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
e.DrawBackground();
if(e.State == DrawItemState.Focus)
e.DrawFocusRectangle();
var index = e.Index;
if(index < 0 || index >= Items.Count) return;
var item = Items[index];
string text = (item == null)?"(null)":item.ToString();
using(var brush = new SolidBrush(e.ForeColor))
{
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
e.Graphics.DrawString(text, e.Font, brush, e.Bounds);
}
}
}
Bạn có thể thử thay đổi thuộc tính FlatStyle
và xem bạn có nhận được điều gì đó theo ý thích của mình hay không. Nếu bạn thực sự muốn nó trông giống như nó làm với DropDownStyle
thiết lập để DropDown
, bạn có thể thiết lập các DropDownStyle
-DropDown
và ăn sự kiện KeyPress
:
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
Tuy nhiên, tôi có lẽ sẽ không làm điều này như sự xuất hiện của ComboBox
là một gợi ý trực quan cho người dùng cho biết liệu họ có thể nhập vào vùng văn bản hay không.
Ít nhất trong win7 chỉ thay đổi đường viền. Nội thất của điều khiển vẫn là một gradient màu xám tương tự như hình nền. IIRC trong XP sự khác biệt giữa hai kiểu thả xuống ít kịch tính hơn nhiều. –
- 1. Cách khắc phục kết xuất đồ thị bán kính của IE kết hợp với hộp bóng?
- 2. Hộp kiểm WPF có nút "Xuất hiện"
- 3. Trình kết xuất mục tùy chỉnh Flex cho mục được hiển thị trong hộp tổ hợp
- 4. Phát hiện sự kiện khóa kết hợp
- 5. Thêm liên kết để xuất hiện bên trong hộp văn bản
- 6. Thay thế Hộp kết hợp Javascript tốt cho hộp tổ hợp có tấn phần tử?
- 7. Android - MediaController của VideoView trong hộp thoại xuất hiện phía sau hộp thoại
- 8. Kết hợp chính xác một sự xuất hiện trong một chuỗi với cụm từ thông dụng
- 9. Kết hợp OrderBy Biểu hiện với Expression
- 10. Kết hợp các hiện vật trong TeamCity
- 11. Kết hợp dấu tách trong hộp danh sách
- 12. cách lấy giá trị trên hộp kết hợp extjs?
- 13. Selenium WebDriver để chọn mục hộp kết hợp?
- 14. Văn bản bọc hộp kết hợp khi nhập
- 15. Mục chọn hộp kết hợp trong JavaFX 2
- 16. Đặt các mục trong hộp kết hợp Qt
- 17. Tkinter - Cách tạo hộp kết hợp tự động hoàn thành
- 18. Tìm kiếm Hộp kết hợp như Google Tìm kiếm
- 19. Trích xuất một phần của một kết hợp regex
- 20. Trích xuất các kết quả phù hợp từ php regex
- 21. VS2012 Thực hiện kết quả kiểm tra xuất hiện trong cửa sổ Kết quả kiểm tra
- 22. Nhận văn bản đã chọn của hộp kết hợp bằng jQuery, theo tên của hộp tổ hợp?
- 23. Hộp tổ hợp Vaadin
- 24. tổng hợp số lần xuất hiện mỗi ngày gấu trúc
- 25. FPDI hợp nhất các tệp PDF, dòng lạ xuất hiện
- 26. Các giá trị trích xuất được trích xuất trong kết hợp mẫu?
- 27. Đường viền bị đứt trên liên kết xuất hiện rắn
- 28. Hộp màu xám xuất hiện trong các phần của Google Map được nhúng trong hộp phương thức
- 29. Nhiều lần xuất hiện cụm từ thông dụng trong một hộp văn bản nhiều dòng
- 30. Rails AtomFeedBuilder Entry: Tùy chọn Url xuất hiện trong thẻ url nhưng không xuất hiện trong thẻ liên kết
Thú vị. Có phải đó là thứ bạn đã viết từ đầu hoặc được lấy từ khung công tác bằng cách sử dụng sự phản chiếu không? –
Nó được viết từ đầu. Trong thực tế, hành vi này không thực sự mong đợi. Một số thời gian trước, tôi cần phải thực hiện một hộp kết hợp với bức tranh mục tùy chỉnh và nhận thấy rằng việc thay đổi thuộc tính 'DrawMode' cũng ảnh hưởng đến kiểu điều khiển, buộc nó vào' DropDown'. – max
+1, @max: rất đẹp! –