쉽게 반사를 통해 클래스를 얻을 수 있습니다 :
var formNames = this.GetType().Assembly.GetTypes().Where(x => x.Namespace == "UI.Foo.Forms").Select(x => x.Name);
당신이 양식과 같은 어셈블리 코드에서이 전화하는거야 가정하면, 당신은에있는 모든 유형의 이름을 얻을 것이다 "UI.Foo.Forms"네임 스페이스. 그런 다음 드롭 다운에이를 제시하고, 결국 반사를 통해 사용자에 의해 선택 중 인스턴스화 할 수 있습니다 한 번 더 :
Activator.CreateInstance(this.GetType("UI.Form.Forms.FormClassName"));
[편집] 디자인 타임 물건에 대한 코드를 추가 :
당신의 통제에서 당신 다음과 같이 Form 속성을 만들 수 있습니다.
정의해야하는 편집기 유형을 참조하는 것은 다음과 같습니다. 코드는 아주 자명하며, 최소한의 조정만으로 원하는 것을 정확히 생성 할 수 있습니다.
public class TestDesignProperty : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
var edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
ListBox lb = new ListBox();
foreach(var type in this.GetType().Assembly.GetTypes())
{
lb.Items.Add(type);
}
if (value != null)
{
lb.SelectedItem = value;
}
edSvc.DropDownControl(lb);
value = (Type)lb.SelectedItem;
return value;
}
}
나는 형식의 목록을 얻는 방법을 알고 있었지만, 공공 장소를 디자인 할 때 디자인 격자에서 채워지는 방법을 정확히 모릅니다. –
디자인 타임 요구 사항을 해결하기 위해 필자의 대답이 업데이트되었습니다. – CMerat
감사합니다. 메라트, 나는 받아들이 기 위해 또 다른 14 시간을 기다려야한다. (칠면조 사냥을하기 때문에 며칠이 걸릴 수도있다. :) 그러나 완벽하게 일했다. –