2009年5月10日日曜日

久しぶりの.netメモ form開発の取り決め

今回windowsformを使った開発がありました。
んで、そのときのメモ。
windowsアプリケーションでは、1画面ごと、Formを使って作るみたい。
一番最初に、
program.csのMain()からApplication.Run(new Form1())が呼ばれて、Form1の処理が始まる。

Mainで、
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler( f);
:

public static void f(object sender, System.Threading.ThreadExceptionEventArgs e)
{
}
で、asp.netのglobal.asaxのerrと同じようなことができる。
ただ、このイベントは、Thread中の例外を捕捉するものなので、Form1のコンストラクタ処理中に発生したの例外は(Run評価前でスレッド開始前なので)これでは取れないので、try/catchしないといけない。

次画面遷移については、親画面(Form1)で、子画面(Form2)をnew→form2.Ownerにthis(つまりform1自身)をセット→form2の引継ぎプロパティをセット→、form2.Show(),form1.Hide()を行って次画面遷移。ダイアログ表示は、form2.ShowDialog()で、戻り値によるダイアログ処理結果取得。

情報共有については、static変数(Application共通の場合のみ)
親画面(Form1)から子画面(Form2)への情報受け渡しは、
1.Owner.親画面のプロパティ
2.親画面でセットされた自画面のプロパティ
3.子画面のコンストラクタを呼ばれたときの引数
このうち1,2は、コンストラクタ生成→子画面のプロパティセット(Ownerプロパティ含む)→Showなので、子画面のコンストラクタやloadでは親画面のプロパティセット前のためプロパティアクセスは不可。
でも、いまのコーディングルール上は、Showをする場合は、2.の子画面側で、自分の画面のプロパティを参照することと、ShowDialogは親画面(Owner)のプロパティを参照することとなっている。

子画面→親画面への引渡し方法は、
1.子画面の処理中に行う親画面へのプロパティセット、
2.ShowDialog()の戻り値(DialogResult)

で、Formの削除、生成のタイミングは、
次画面へ遷移する場合、親画面側で、newすることとなっている。
戻る場合は、子画面側から親画面のShowを行い、自画面をdisposeするとなっている。(親画面側からしかdisposeが利かないような気がするが。。)

0 件のコメント: