バックナンバー:VB.NETデータベースプログラミング
ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。
【第31号】
第31号(2005.9.20発行) ====================================================================== ★★ VB.NETデータベースプログラミング奮闘記 ★★ ---------------------------------------------------------------------- いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中 心に掲載しますので、今後ともよろしくお願い申し上げます。 すぐ使えるADO.NET --> サンプルプログラム満載 http://park5.wakwak.com/‾weblab/ ====================================================================== ■■ VB.NETワンポイント:フォームクラスのコンストラクタ ■■ 引数が無いコンストラクタを、デフォルトコンストラクタといいます。Windows アプリケーションのプロジェクトを新規に作成すると、#Region と #End Region の間に、 Public Sub New() MyBase.New() ' この呼び出しは Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後に初期化を追加します。 End Sub のデフォルトコンストラクタが自動的に生成されます。 自動生成部分は、追加や変更することなくプロジェクトを構築することができ ますが、「' InitializeComponent() 呼び出しの後に初期化を追加します。」 の部分に手を加えることもできます。 コンストラクタを追加することもできます。引数の数が違っていたり、引数の 数が同じでも、引数の型が異なれば、いくつでもコンストラクタを追加するこ とができます。 今回は、このことを利用して、メインメニューフォームクラスのオブジェクト の参照を、コンストラクタの引数に指定して、 Public Sub New(ByVal perForm As Form) を、#Region と #End Regionの間の Public Sub New() の次に追加定義します。 ---------------------------------------------------------------------- ■■ フォームにメニューボタンを動的に生成する 3 ■■ コンストラクタに、メインメニューフォームの参照を引数に指定して、呼び出 すフォームのオブジェクト(インスタンス)を作成する方法について説明します。 呼び出されるフォームクラスには、自動生成された引数のないコンストラクタ しかありませんから、フォームクラスの参照を引数に指定するコンストラクタ を追加します。自動生成された引数なしのコンストラクタをコピーして、必要 な処理を追加します。 呼び出されるフォームクラスには、メインメニューフォームクラスのオブジェ クトの参照を保持するPrivateなメンバ変数を宣言します。追加したコンスト ラクタでは、引数をこのメンバ変数に代入する処理を1行追加します。 Private mForm As Form Public Sub New(ByVal perForm As Form) MyBase.New() ' この呼び出しは Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後に初期化を追加します。 mForm = perForm '◆この1行が追加部分 End Sub 前号では、終了ボタン、フォーム右上の×ボタン、及び Alt + F4 キー押下時 のイベントハンドラの記述は、Ownerプロパティに設定した参照から、showメ ソッドを呼び出して、親フォームを再表示していました。 oMenuForm = Me.Owner oMenuForm.Show() 今回は、mFormを操作して、 mForm.Show() として、親メニューを再表示するように変更します。 再表示が終わったら、Disposeメソッドを呼び出して破棄します。念のため、 破棄する前に、フォームインスタンスが存在することを If Not Me Is Nothing で確認して、mForm の参照を解放しておきます。 --【プログラムソースリスト】------------------------------------------ Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " '自動生成部分省略 #End Region '呼び出されるフォーム Private oForm As Form 'メニューボタンコントロール配列 Friend aryBtnMenu() As System.Windows.Forms.Button '----------<< フォームロード処理 >>---------- Private Sub Form1_Load _ (ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Dim oTblMenu As New clsDBIO() Dim oTable As New DataTable() 'メニューをメニューテーブルから取得するメソッド oTable = oTblMenu.getMenuRec("m0001") 'メニューの数だけボタンを生成 Me.aryBtnMenu = _ New System.Windows.Forms.Button(oTable.Rows.Count - 1) {} '描画を一時中止する(画面のちらつき防止) Me.SuspendLayout() 'メニューの数だけボタンのインスタンス生成 '(自動生成ソースを参考にしてコーディング) Dim i As Integer For i = 0 To Me.aryBtnMenu.Length - 1 'ボタンのインスタンス生成 Me.aryBtnMenu(i) = New System.Windows.Forms.Button() 'ボタンのプロパティ設定 Me.aryBtnMenu(i).Location = New Point(50, i * 30 + 50) Me.aryBtnMenu(i).Name = _ "btn" + CStr(oTable.Rows(i).Item(3)) Me.aryBtnMenu(i).Size = New Size(200, 25) Me.aryBtnMenu(i).Text = CStr(oTable.Rows(i).Item(2)) 'AddHandlerステートメントでボタンクリック時の 'イベントハンドラを定義 AddHandler Me.aryBtnMenu(i).Click, _ AddressOf Me.aryBtnMenu_Click Next i 'フォームのControlsプロパティのAddRangeで 'フォームにボタンコントロールを追加 Me.Controls.AddRange(Me.aryBtnMenu) '描画を再開する Me.ResumeLayout(False) End Sub 'Buttonのクリックイベントハンドラ Private Sub aryBtnMenu_Click(ByVal sender As Object, _ ByVal e As EventArgs) '表示するフォーム名(先頭の"btn"を削除する)を取得 Dim frmName As String frmName = DirectCast(sender, Button).Name.Remove(0, 3) '表示するフォームの型を取得 Dim oType As Type = _ Reflection.[Assembly].LoadFrom("TextBoxBind.exe"). _ GetType("TextBoxBind." + frmName) 'フォームの型からインスタンス作成 Dim oObj As Object = _ Activator.CreateInstance(oType, New Object() {Me}) '作成したインスタンスをフォーム型に変換してShowメソッドで表示 oForm = CType(oObj, Form) oForm.Show() Me.Hide() End Sub End Class '◆ 呼び出されるフォームクラス Public Class frmMenu01 Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " Public Sub New() MyBase.New() ' この呼び出しは Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後に初期化を追加します。 End Sub '--------------------------- 追加 ------------------------------- Private mForm As Form Public Sub New(ByVal perForm As Form) MyBase.New() ' この呼び出しは Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後に初期化を追加します。 mForm = perForm End Sub '---------------------------------------------------------------- '----- 以下自動生成部分省略 ----- #End Region Private Sub btnEnd_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs _ ) Handles btnEnd.Click Me.formClose() End Sub Private Sub frmMenu01_Closing( _ ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs _ ) Handles MyBase.Closing Me.formClose() End Sub Private Sub formClose() Try mForm.Show() Finally If Not Me Is Nothing Then mForm = Nothing Me.Dispose() End If End Try End Sub End Class ---------------------------------------------------------------------- ■■ 次号予告 第32号(10月12日発行予定) ■■ 1. VB.NETワンポイント 2. データベースアクセスクラスの汎用メソッドについて ====================================================================== VB.NET データベースプログラミング奮闘記 発行者:ウェブ実験室(-----@-----) http://park5.wakwak.com/‾weblab/ ---------------------------------------------------------------------- このメールマガジン(マガジンID: 0000128094)は、 インターネットの本屋さん『まぐまぐ』から配信されています。 http://www.mag2.com/ 【購読中止の方法】購読の中止は次のホームページからお願い致します。 http://park5.wakwak.com/‾weblab/ http://www.mag2.com/m/0000128094.htm ---------------------------------------------------------------------- このメールマガジン及び、「すぐ使えるADO.NET」ホームページで公開してい るソースプログラム・データの利用により生じた損害等については、発行者は 一切責任を負いません。 ソースプログラムの再利用は自由です。著作権は発行者が所有します。 このメールマガジン及び、「すぐ使えるADO.NET」ホームページに掲載されて いる会社名・製品名等は、各社の登録商標または商標です。 ======================================================================
↑このページ(メルマガ:VB.NETデータベース) 先頭へ | すぐ使えるADO.NET ホームへ
Copyright© すぐ使えるADO.NET. All rights reserved.