Làm thế nào để bạn sửa đổi một propertygrid khi chạy theo mọi cách? Tôi muốn để có thể thêm và loại bỏ các thuộc tính và thêm "các loại động", những gì tôi có nghĩa là với một loại mà kết quả trong một thời gian chạy tạo ra thả xuống trong propertygrid bằng cách sử dụng một TypeConverter.Làm thế nào để sửa đổi PropertyGrid khi chạy (thêm/xóa thuộc tính và kiểu động/enums)
Tôi thực sự có thể thực hiện cả hai điều đó (thêm/xóa thuộc tính và thêm loại động) nhưng chỉ riêng biệt không cùng một lúc.
Để thực hiện hỗ trợ thêm và xóa thuộc tính trong thời gian chạy, tôi đã sử dụng this codeproject article và sửa đổi mã một chút để hỗ trợ các loại khác nhau (không chỉ là chuỗi).
private System.Windows.Forms.PropertyGrid propertyGrid1;
private CustomClass myProperties = new CustomClass();
public Form1()
{
InitializeComponent();
myProperties.Add(new CustomProperty("Name", "Sven", typeof(string), false, true));
myProperties.Add(new CustomProperty("MyBool", "True", typeof(bool), false, true));
myProperties.Add(new CustomProperty("CaptionPosition", "Top", typeof(CaptionPosition), false, true));
myProperties.Add(new CustomProperty("Custom", "", typeof(StatesList), false, true)); //<-- doesn't work
}
/// <summary>
/// CustomClass (Which is binding to property grid)
/// </summary>
public class CustomClass: CollectionBase,ICustomTypeDescriptor
{
/// <summary>
/// Add CustomProperty to Collectionbase List
/// </summary>
/// <param name="Value"></param>
public void Add(CustomProperty Value)
{
base.List.Add(Value);
}
/// <summary>
/// Remove item from List
/// </summary>
/// <param name="Name"></param>
public void Remove(string Name)
{
foreach(CustomProperty prop in base.List)
{
if(prop.Name == Name)
{
base.List.Remove(prop);
return;
}
}
}
vv ...
public enum CaptionPosition
{
Top,
Left
}
giải pháp hoàn chỉnh của tôi có thể được tải về here.
Nó hoạt động tốt khi tôi thêm chuỗi, bool hoặc enums, nhưng khi tôi cố gắng thêm một "loại động" như StatesList nó không hoạt động. Có ai biết tại sao và có thể giúp tôi giải quyết nó?
public class StatesList : System.ComponentModel.StringConverter
{
private string[] _States = { "Alabama", "Alaska", "Arizona", "Arkansas" };
public override System.ComponentModel.TypeConverter.StandardValuesCollection
GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(_States);
}
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return true;
}
}
Phương pháp sử dụng một TypeConverter hoạt động tốt khi bạn không cố gắng thêm tính tại thời gian chạy, ví dụ this code công trình mà không cần bất kỳ vấn đề, nhưng tôi muốn để có thể làm cả hai.
Hãy xem my project. Cảm ơn!
Bạn đang chào đón :) –
Tôi biết bài này là rất cũ, nhưng tôi có một câu hỏi ngắn. Tôi sử dụng chính xác mã của bạn trong ứng dụng của tôi nhưng combobox tùy chỉnh không hoạt động. Tên của thuộc tính có màu xám và không có tùy chọn nào. Bất kỳ ý tưởng, những gì tôi có thể làm để sửa chữa điều đó? Xin cảm ơn trước, Martin – user653427
@ user653427, Vì đây là một câu hỏi cũ nên bạn cũng nên đặt câu hỏi mới và liên kết lại trang này. Bạn sẽ có thể cung cấp thêm chi tiết và tiếp cận nhiều người hơn theo cách đó. –