2012-03-20 23 views
6

Tôi có một System.Windows.Forms.PropertyGrid với các loại giá trị khác nhau. Đối với một mục cụ thể, tôi muốn hiển thị danh sách các giá trị hữu ích để chọn. Người dùng cũng có thể nhập một giá trị mới. Một cái gì đó tương tự như một dropdown combobox truyền thống:Làm cách nào để thêm combobox có thể chỉnh sửa vào System.Windows.Forms.PropertyGrid?

enter image description here

Cho đến nay, tôi có riêng System.ComponentModel.TypeConverter của tôi, nhưng tôi không thể tìm ra cách để có được cả hai thả xuống với các giá trị đề nghị khả năng để chỉnh sửa giá trị trực tiếp. Hãy giúp tôi!

Trả lời

6

Bạn có thể thực hiện việc này bằng cách triển khai UITypeEditor của riêng mình.

Tôi khuyên bạn nên đọc Getting the Most Out of the .NET Framework PropertyGrid Control. Cụ thể, phần có tiêu đề Providing a Custom UI for Your Properties hướng dẫn cách thực hiện kiểm soát tùy chỉnh cho một thuộc tính cụ thể.

+2

Thừa kế 'System.ComponentModel.StringConverter' đã giải quyết được sự cố. Rõ ràng, chỉnh sửa văn bản không thể được thực hiện với các loại khác so với chuỗi. Cảm ơn các liên kết mặc dù! – l33t

4

Thật dễ dàng. Trong của riêng bạn StringConverter trả lại false cho GetStandardValuesExclusive và đó là nó.

Nhìn đây:

internal class cmbKutoviNagiba : StringConverter 
{ 
     public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) 
     { 
      return FALSE; // <----- just highlight! remember to write it lowecase 
     } 

     public override TypeConverter.StandardValuesCollection GetStandardValues(
      ITypeDescriptorContext context) 
     { 
      string[] a = { "0", "15", "30", "45", "60", "75", "90" }; 
      return new StandardValuesCollection(a); 
     } 

     public override bool GetStandardValuesSupported(ITypeDescriptorContext context) 
     { 
      return true; 
     } 
    } 

tôi đã viết FALSE bằng chữ in hoa, chỉ để làm cho bạn easyer để xem nó. Vui lòng đặt nó bằng chữ nhỏ :)

+1

BTW: Ghi đè 'GetStandardValuesExclusive' dường như chỉ được gọi khi được sử dụng trong một lớp có nguồn gốc từ' StringConverter'. Nó dường như không được gọi khi bạn lấy được lớp của bạn từ 'TypeConverter'. –

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