2012-05-10 13 views
0

私は、アプリケーションにBindingSourceにバインドされたDataGridを表示するフォームを用意しています。行をダブルクリックすると、詳細フォームが表示されます。不明な型の渡されたフォームのインスタンス化

私は、これらの付随する詳細フォームと一緒に、これらの「ブラウズ」フォームを50種類近く持っています。私はベースブラウズフォームを作成し、適切なBindingSourceを渡してフォーム(およびコード)の数を減らしたいと考えています。私はこれが働いている。ただし、行をダブルクリックすると、渡されたBindingSourceに関連する詳細フォームがインスタンス化されます。

たとえば、ユーザーがCustomerテーブルを参照すると、Customer Detailフォームが開きますが、Jobテーブルを参照している場合は、Job Detailフォームが開きます。

汎用ディテールフォームをパラメータとして渡すことはできますが、渡されたフォームを正しいタイプのものにキャストしてインスタンス化できますか?

(Iスルーサイクルが正しい渡されたフォームを選択することに大きなswitch文を避けるためにしようとしています。確かにこれを達成するために、よりエレガントな方法はありますか?)

[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」を交換する方法が必要ですd。

+0

をするのに役立ちます。 –

+0

私は実際にBindingSourceとフォームのコピーを渡しています。 – Chimesy

答えて

0

たぶん、これらの一つはあなたが設定オブジェクトが* 2人の*メンバーのBindingSourceおよび詳細フォームのタイプを必要とする形成



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

関連する問題