2012-04-26 18 views
0

私はwinformsプロジェクトに3つのフォームがあり、そのすべてにForm2を開くための同じコードを起動するボタンがあります。このコードを同じプロジェクト内のクラスファイルに置くか、別のクラスライブラリに入れてコードを集中させる必要があります。私は一般的な形式にForm1に、Form2を、たForm3からこのコードを移動するとクラスライブラリ/ファイルから呼び出しウィンドウフォームを閉じる方法は?呼び出しフォームにアクセスして.close()を実行する必要があります

frm1 entryform = (frm1)Application.OpenForms["frm1"]; 

if (entryform == null) 
{ 
    entryform = new frmMainMenu(); 
} 
entryform.StartPosition = FormStartPosition.Manual; 
entryform.Location = this.Location; 
entryform.Show(); 

this.close(); 

私はthis.close(); がされている行を置き換えるために、呼び出し元のフォームにアクセスすることはできません。今のコードは以下のように同じ形の内部にありますMethod.CallingForm.Close()やC#の何かのようなプロパティがありますか?助けてください

私はパラメータとしてフォームを渡したくありません。フォームは渡すには重すぎます。他の選択肢?

+0

私はパラメータとしてフォームを渡したくありません。フォームは渡すには重すぎます。他の選択肢? – Enggr

+2

これは本当に悪い考えです。あなたの問題を簡単に解決するには、フォームの代わりに独自のClose()メソッドを呼び出してください。 –

+0

@Enggr:あなたのフォームがどれほど重いものであっても、それを渡すことは簡単です。基本的にオブジェクト参照を渡しています。あなたがそれを渡した後にあなたがフォームで行うことは、あなたがそれを重いと考えるようにする可能性があることです。漢のアドバイスに従って、それぞれのフォームがそれ自体を閉じる責任を負うように論理を変更してください。 –

答えて

2

フォームが重いためにパラメータとして渡すことについて心配する必要はありません。

フォームは参照タイプであり、パフォーマンスの低下は起こりません。

ベストプラクティスを検討する場合は、フォームを閉じる必要があるときにセントラルクラスでイベントを発生させる必要があります。

0

フォームをパラメータとして渡します。

あなたが今までに渡したすべてがフォーム全体ではなく、フォームへの参照であるため、渡されるフォームは重くないようにしてください。

関連する問題