2012-05-10 3 views
0

У меня есть формы в моем приложении, которые отображают привязку DataGrid к BindingSource. Когда я дважды щелкаю по строке, я показываю детальную форму.Создание экземпляра неизвестного типа

У меня есть почти 50 из этих форм для просмотра с их сопровождающей формой формы. Я хотел бы уменьшить количество форм (и кода), создав базовую форму просмотра и передав ей соответствующий BindingSource. У меня это работает. Однако, когда я дважды щелкаю по строке, я хочу создать форму детали, связанную с переданным BindingSource.

Например, если пользователь просматривает таблицу Customer, откроется форма детали клиента, но если он просматривает таблицу Job, откроется форма Job Detail.

Я могу передать общую форму детали как параметр, но как мне передать эту переданную форму одному из правильного типа, чтобы я мог его создать?

(Я пытаюсь избежать большого заявления переключателя, который перебирает, чтобы выбрать правильную принятую форму. Конечно, есть более элегантный способ для достижения этой цели?)

[EDIT] Моего просматривает код формы инстанциируется таким образом:

public BaseBrowse(BindingSource dataClass, DevExpress.XtraEditors.XtraForm crudForm) 
    { 
     InitializeComponent(); 
     bs = dataClass; 
     crud = ((CRUDEquipment)(crudForm)); 
    } 

Мой двойной щелчок событие таким образом:

private void gvw_DoubleClick(object sender, EventArgs e) 
    { 
     Int32 nID = Convert.ToInt32(gvw.GetFocusedRowCellValue("ID")); 
     ((CRUDEquipment)(crud)).intID = nID; 
     ((CRUDEquipment)(crud)).Show();     
    } 

Мне нужен способ, чтобы заменить «CRUDEquipment» с какой бы форме я урожденная д.

+0

Таким образом, вы формируете объект конфигурации необходимо * два * членов, в BindingSource и тип для формы деталей. –

+0

Я фактически передаю BindingSource и копию формы. – Chimesy

ответ

0

Может быть, один из них поможет



public void Instantiate<T>() 
{ 
    var myObject = Activator.CreateInstance<T>(); 
    // Do something with myObject 
} 

public void Instantiate(Type t) 
{ 
    var myObject = Activator.CreateInstance(t); 
    // Do something with myObject 
} 

public void Instantiate(string typeName) 
{ 
    var detailType = Type.GetType(typeName); 

    if (detailType == null) 
    { 
     throw new InvalidOperationException("Nice try, but type {0} doesn't compute :)"); 
    } 

    var myObject = Activator.CreateInstance(detailType); 
    // Do something with myObject 
} 

+0

Где я могу поместить этот код? – Chimesy