Tôi đang cố gắng hiểu tại sao mã bên dưới không hoạt động như mong đợi; TypeDescriptor
chỉ đơn giản là không chọn công cụ chuyển đổi tùy chỉnh từ các thuộc tính. Tôi chỉ có thể giả định rằng tôi đã mắc phải một sai lầm rõ ràng nhưng tôi không thể nhìn thấy nó.Tại sao TypeConverter này không hoạt động?
- chỉnh sửa - mã này dường như hoạt động khi tôi chạy nó trong bảng điều khiển, tôi thực sự gọi một trình chuyển đổi từ trong một ứng dụng phức tạp hơn và từ một không gian tên khác.
- chỉnh sửa - thay thế bất kỳ đề xuất nào về cách tôi có thể gỡ lỗi TypeDescriptor để tôi có thể xem những gì đang diễn ra và sau đó tôi có thể tự mình trả lời.
- chỉnh sửa - sự cố này gần như chắc chắn liên quan đến các phần nằm trong các hội đồng khác nhau.
- chỉnh sửa - Có vẻ như thao tác này không hoạt động do một số tính năng không hoạt động của các assembly tải - mã này đang chạy dưới một plugin như kiến trúc.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.ComponentModel;
namespace MyTest
{
public class TestTester
{
public static void Main(string[] args)
{
object v = TypeDescriptor.GetConverter(typeof(MyTest.Test)).ConvertFromInvariantString("Test");
}
}
public class TestConverter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return false;
}
public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType)
{
if (sourceType == typeof(string) || base.CanConvertFrom(context, sourceType))
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(Test) || base.CanConvertTo(destinationType))
{
return true;
}
return base.CanConvertTo(context, destinationType);
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value.GetType() == typeof(string))
{
Test t = new Test();
t.TestMember = value as string;
return t;
}
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string) && value.GetType() == typeof(Test))
{
return ((Test)value).TestMember;
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
[TypeConverterAttribute(typeof(TestConverter))]
public struct Test
{
public string TestMember { get; set; }
}
}
Tôi nghĩ rằng nó rất có khả năng làm với nó đang được trong hội đồng khác nhau - Tôi đã chỉ cố gắng di chuyển bit xung quanh; khi tôi đã có một PropertyGrid đề cập đến các mục trong một hội đồng khác nó không còn có thể sử dụng TypeConverters et al của nó để hiển thị thuộc tính. Tôi sẽ ngạc nhiên nếu không có giải pháp cho điều này mặc dù. – cyborg