以下のページではフォームクラスにフラグを宣言し、フォームActivatedイベントの処理で最初の呼び出しかどうかを判定していました。
このフラグ処理ですが、全てのフォームに宣言するのも手間が掛かりますので、いっそ継承クラスのフォームにしてはと思い テスト的なフォームのクラスを作成してみました。
先ずはフォーム名をfrmOneActiveBaseとして、 ソース内容は上記の「最初のフォームActivatedイベントでの処理」の内容をそのままコピーしてきます。 但し、テキストボックスの処理は削除してあります。
イベントを1個作成し名前をOneActivatedとして宣言します。 このイベントを、初回のフォームActivatedイベントで発生させる様にします。 ソースは以下の様になります。
ベースのフォーム処理
Public Class frmOneActiveBase 'イベント宣言 Public Event OneActivated(ByVal sender As Object, ByVal e As EventArgs) 'アクティブフラグ Private mblnActivated As Boolean = False '''''' フォームアクティブイベント ''' Private Sub frmOneActiveBase_Activated(sender As Object, e As EventArgs) Handles Me.Activated 'アクティブフラグOFF?? If Me.mblnActivated = False Then 'フラグON Me.mblnActivated = True 'イベント発生 RaiseEvent OneActivated(Me, New EventArgs) End If End Sub '''''' フォームロードイベント ''' Private Sub frmOneActiveBase_Load(sender As Object, e As EventArgs) Handles Me.Load Me.mblnActivated = False End Sub End Class
ここで一旦ビルド作業を行います。 その後、このfrmOneActiveBaseフォームを継承するフォームを作成してみます。
メインメニューの「プロジェクト」⇒「新しい項目の追加」を選択し、以下の表示になったら 左の「Windows Fomrs」を選択後「継承されたフォーム」を選択し、フォーム名をfrmOneActiveとします。
その後「継承ピッカー」の選択になりますので、先ほどの「frmOneActiveBase」を選択しますと以下の様な表示なります。
frmOneActiveのフォームが以下の様に表示されます。
frmOneActiveのフォームが表示されたら、1個のテキストボックスを貼付け、 複数行許可を画面右のプロパティウインドウから行います。
ここでfrmOneActiveフォームのソースを表示させ、 さらに、「frmOneActive(アクティブ)」から「OneActivated」イベント探して、指定します。
そこで、以下の様にソースを記述します。
Public Class frmOneActive Private Sub frmOneActive_OneActivated(sender As Object, e As EventArgs) Handles Me.OneActivated 'テキストボックに時刻表示 Me.TextBox1.Text &= "Activated..." & Now.ToString("hh:mm:ss") & vbCrLf End Sub End Class
これでフォームのActivatedイベントでフラグ処理を行わずとも、このOneActivatedイベントの中で処理が可能となります。
関連する記事
⇒フォームの位置設定を行う処理 :[Screen.PrimaryScreen.WorkingArea]⇒フォームクラスにプロパティ宣言し外からアクセスする方法
⇒親フォームのコントロールを子フォームからアクセスする方法
⇒フォームが閉じるのをキャンセルする方法:[FormClosingEventArgs,Cancel]
⇒フォームの表示をモジュールのMain関数から行う(エントリポイントの変更)
⇒フォームがKeyDownなどのキーイベントを受取り、ファンクションキー処理をする
⇒最初のフォームActivatedイベントでの処理(1回のみしか処理しない様にする)
⇒初回のフォームActivatedイベント発生させるフォーム継承について
コメント