【zz】C#フォームダイアログモード

5815 ワード

フォーム本章では、簡単なWindowsアプリケーションの作成方法について説明します.この例は、Systemから派生するものを含む.Windows.Forms.Formのクラス.根据NET Frameworkの説明書「フォームはアプリケーション内のウィンドウの表示方法です.」Visual Basicの背景がある場合は、「フォーム」という用語に詳しいです.MFCのC++プログラマーを使用している場合は、フォームをウィンドウ、ダイアログ、フレームワークと呼ぶことに慣れている可能性があります.いずれにしても、フォームはユーザーと対話する基本的な方法です.Controlクラスで一般的なプロパティ、メソッド、イベントについて説明しました.また、FormクラスはControlクラスに割り当てられているので、Formクラスにはこれらのプロパティ、メソッド、イベントが存在します.FormクラスはControlクラスに加えて多くの機能を追加していますが、この節ではこれらの機能について説明します.FormクラスWindowsクライアントアプリケーションには、1つのフォームまたは100以上のフォームが含まれます.SDI(単一ドキュメントインタフェース、Single Document Interface)またはMDI(マルチドキュメントインタフェース、Multiple Document Interface)に基づくアプリケーションであってもよい.とにかくシステムWindows.Forms.Formクラスは、Windowsクライアントアプリケーションのコアです.FormクラスはContainerControlに、ContainerControlはScrollableControlに、ScrollableControlはControlクラスに割り当てられます.したがって、フォームは他のコントロールのコンテナであり、含まれるコントロールが顧客領域に表示されない場合にスクロール表示され、フォームは他のコントロールと同じ属性、方法、イベントを持つことができると仮定できます.だから、Formクラスはかなり複雑です.このセクションでは、これらの機能について説明します.1.フォームのインスタンス化と解放は、フォームを作成するプロセスを理解することが重要です.私たちが完了する作業は、初期化コードを記述する場所に依存します.インスタンスの場合、イベントは、初期化中に、●コンストラクション関数●Load●Activated●Closing●Closed●Deactivateの最初の3つのイベントの順に発生します.初期化のタイプに応じて、どのイベントを関連付けるかを決定できます.このクラスのコンストラクション関数は、オブジェクトのインスタンス化中に実行されます.Loadイベントは、オブジェクトがインスタンス化された後、フォームが表示される前に発生します.コンストラクション関数との違いは、フォームの可視性です.Loadイベントを開始すると、フォームは既に存在しますが、表示されません.コンストラクション関数の実行中にフォームは存在せず、インスタンス化中です.Activatedイベントは、フォームが表示され、現在の状態にあるときに発生します.このイベントの実行順序を少し変更する場合があります.フォームコンストラクション関数の実行中にVisibleプロパティがtrueに設定されている場合、またはShowメソッド(Visibleプロパティがtrueに設定されている)が呼び出されると、すぐにLoadイベントが発生します.これにより、フォームが表示され、現在の状態になるため、Activateイベントも発生します.Visibleプロパティの設定後にコードがある場合は、これらのコードを実行します.したがって、起動イベントの実行順序は、●コンストラクション関数、Visible=trueまで●Load●Activate●コンストラクション関数、Visible=trueを実行した後のコードであり、予期せぬ結果が生じる.コンストラクション関数では、できるだけ多くの初期化を行うことが望ましい.フォームを閉じるときに発生するClosingイベントは、CancelEventArgsをパラメータとして処理をキャンセルし、Cancelプロパティをtrueに設定するとイベントがキャンセルされ、フォームが開いたままになります.Closingイベントはフォームが閉じたときに発生し、Closedイベントはフォームが閉じた後に発生します.この2つのイベントでは、必要なクリーンアップ作業を実行できます.なお、Deactivateイベントはフォームが閉じた後に発生し、検索しにくいエラーが発生する可能性のある別のソースです.Deactivateイベントでフォームが通常のゴミ収集から保護されていないことを確認します.たとえば、別のオブジェクトへの参照を設定すると、フォームが解放されません.アプリケーションを呼び出すと.Exit()メソッドで、現在1つ以上のフォームが開いている場合、ClosingイベントやClosedイベントは発生しません.クリーンアップするファイルまたはデータベース接続が開いている場合は、Disposeメソッドを呼び出す必要があります.したがって、ほとんどのクリーンアップコードをDisposeメソッドに配置するよりも良い方法があります.フォームの起動に関連するいくつかのプロパティには、StartPosition、ShowInTaskbar、TopMostがあります.StartPositionは、FormStartPosition列挙の値:●Center Parent:フォームが親フォームの顧客領域の中心にある場合があります.●CenterScreen:フォームは現在の画面の中心にあります.●Manual:フォームの位置は、Locationプロパティの値に基づいて決定されます.●WindowsDefaultBounds:フォームはデフォルトのWindowsの場所にあり、デフォルトのサイズを使用します.●WindowsDefaultLocation:フォームはデフォルトのWindowsの場所にありますが、サイズはSizeプロパティによって異なります.ShowInTaskbarプロパティは、フォームがタスクバーに表示されるかどうかを決定します.このプロパティは、フォームがサブフォームであり、親フォームがタスクバーに表示される場合にのみ使用します.TopMostプロパティは、フォームがアプリケーションの起動時に一番上にあることを指定します.フォームがすぐにフォーカスを取得しなくても、一番上にあることを指定します.ユーザーがアプリケーションと対話できるように、ユーザーはフォームを表示できる必要があります.これはShowとShowDialogの手法で実現できる.Showメソッドは、フォームをユーザーにのみ表示します.次のコードでは、フォームを作成してユーザーに表示する方法を示します.表示するフォームをMyFormClassと呼びます.
MyFormClass myForm = new MyFormClass();
myForm.Show();

これはとても簡単です.しかし、その欠点の一つは、MyFormが処理され、終了したことを示す通知を呼び出しコードに送信していないことです.時々これは重要ではありませんが、Showの方法はよく働いています.何らかの通知が必要な場合は、ShowDialogメソッドを使用するのが良いです.Showメソッドを呼び出すと、Showメソッドの後のコードがすぐに実行されます.ShowDialogメソッドを呼び出すと、ShowDialogメソッドを呼び出すフォームが閉じてから実行を続行するまで、呼び出しコードは実行を一時停止されます.呼び出しコードが実行を一時停止されるだけでなく、フォームからDialogResult値を返すこともできます.DialogResult列挙は、OK、Cancel、Yes、No、および他のいくつかの識別子を含むダイアログボックスが閉じた理由を記述する識別子のセットです.フォームにDialogResult値を返すには、フォームのDialogResultプロパティを設定するか、フォームのボタンにDialogResultプロパティを設定する必要があります.例えば、アプリケーションの一部が顧客の電話番号を提供することを要求すると仮定する.フォームには、電話番号を入力するテキストボックスと、2つのボタンOKとCancelが含まれています.OKボタンのDialogResult属性をDialogResultとすると.OK、CancelボタンのDialogResult属性をDialogResultに設定.Cancelでは、ボタンの1つを選択するとフォームが表示されず、呼び出されたフォームに対応するDialogResult値が返されます.フォームが解放されていないことに注意し、Visibleプロパティをfalseに設定します.これは、フォームから値を取得する必要があるためです.この例では、電話番号が必要です.フォームに電話番号のプロパティを作成すると、親フォームが値を取得し、フォーム上のCloseメソッドを呼び出すことができます.次に、サブフォームのコードを示します.
namespace FormsSample.DialogSample
{
partial class Phone : Form
{
public Phone()
{
InitializeComponent();
btnOK.DialogResult = DialogResult.OK; btnCancel.DialogResult = DialogResult.Cancel; } public string PhoneNumber { get { return textBox1.Text; } set { textBox1.Text = value; } } } }
まず、処理ボタンクリックイベントのコードは含まれていないことに注意してください.各ボタンのDialogResultプロパティが設定されているため、OKまたはCancelボタンをクリックするとフォームが消えます.追加された唯一のプロパティはPhoneNumberです.次のコードは、親フォームからPhoneダイアログを呼び出す方法を示します.
Phone frm = new Phone();
frm.ShowDialog();
if (frm.DialogResult == DialogResult.OK)
{
label1.Text = "Phone number is " + frm.PhoneNumber;
}
else if (frm.DialogResult == DialogResult.Cancel)
{
label1.Text = "Form was canceled.";
}
frm.Close();
これはとても簡単に見えます.新しいPhoneオブジェクトfrmを作成し、frmを呼び出す.ShowDialog()メソッドの場合、このメソッドのコードは実行を停止し、Phoneフォームの戻りを待つ.次にPhoneフォームのDialogResultプロパティを確認します.フォームはまだ解放されておらず、表示されないため、共通のプロパティにアクセスできます.共通のプロパティの1つがPhoneNumberです.必要なデータを取得すると、フォームのCloseメソッドを呼び出すことができます.