すぐ使えるADO.NET

【Visual BasicによるADO.NETデータベースプログラミング】

本の紹介

バックナンバー:VB.NETデータベースプログラミング

ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。




【第30号】

 第30号(2005.8.29発行)
======================================================================
           ★★ VB.NETデータベースプログラミング奮闘記 ★★
----------------------------------------------------------------------
いつもご購読ありがとうございます。ADO.NETの基本的なプログラミングを中
心に掲載しますので、今後ともよろしくお願い申し上げます。

すぐ使えるADO.NET --> サンプルプログラム満載
                      http://park5.wakwak.com/‾weblab/
======================================================================
  ■■ VB.NETワンポイント:For … Next でのループカウンタ宣言 ■■

前号のソースリストの一部です。For … Next の前で、ループカウンタ i を
宣言していました。

    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)
  -------- 以下省略 --------
    Next i

VB.NET 2003からは、For…Nextステートメントの中で、ループカウンタ i の
宣言もできるようになりました。

    For i As Integer = 0 To Me.aryBtnMenu.Length - 1
  -------- 省略 --------
    Next i

For Each … Next ステートメントでも同様に宣言することができます。次の
例では、For Each … Next で配列を反復処理し、合計値を求めています。

  Dim iAry() As Integer = {1, 4, 5, 8, 10, 12, 15}
  Dim iSum As Integer = 0

  For Each iNum As Integer In iAry
    iSum += iNum
  Next iNum

  Console.WriteLine("合計= " + CStr(iSum))       '結果確認

なお、このメールマガジンでは、今後も最初に宣言する従来からのコーディン
グスタイルを継続します。

----------------------------------------------------------------------
         ■■ フォームにメニューボタンを動的に生成する 2 ■■

◆前号再掲
メニューテーブルから、メニューグループ単位にメニューを読み込んで、動的
にボタンを生成し、ボタン形式のメニューを表示するプログラムを作成します。

メニューテーブルは、sample.mdbに下記のように作成して、あらかじめ数件の
レコード登録しておきます。仮に、テーブルのフォームIDに"frmMenu01",
"frmMenu02", "frmMenu03"を登録した場合には、対応するフォームfrmMenu01,
frmMenu02, frmMenu03を同一プロジェクトに追加します。
------------------------------------------------------------------
key フィールド名       データ型   サイズ  値要求  空文字列の許可
------------------------------------------------------------------
○ メニューグループ テキスト型   5 はい  いいえ
○ メニューID   テキスト型   5 はい  いいえ
− メニュー名称   テキスト型  40 はい  いいえ
− フォームID   テキスト型  16 はい  いいえ
− 更新日時     日付/時刻型  − はい  −
------------------------------------------------------------------

メニューを表示するためのプロジェクトをひとつ作成します。フォームに
は、コントロールはひとつも貼り付けません。フォームのStartPositionプロ
パティをCenterScreenに設定して、中央に表示するようにします。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ メインメニュー                     _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃
┃
┃
┃
┃
┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

それから、メニューから呼び出すフォームfrmMenu01をこのプロジェクトに
追加作成します。タイトルのラベルと終了用のボタンコントロールを貼り付け
ます。終了ボタンを押すと、このフォームを閉じて、メインメニューが表示さ
れます。フォームのStartPositionプロパティをCenterScreenに設定して、中
央に表示するようにします。
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ メニュー01                      _□×┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃   Label1            btnEnd
┃  ┌――――――――――┐   ┌―――┐
┃  │メニュー01    │   │終 了│
┃  └――――――――――┘   └―――┘
┃                                ┃
┃                                ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

同様にして、frmMenu02, frmMenu03もこのプロジェクトに追加します。

◆前号再掲終了

----------------------------------------------------------------------
今号では、メインメニューから呼び出されるフォームクラスの終了処理につい
て説明します。

メインメニューから呼び出されたフォームは、終了ボタンを押すか、フォーム
右上の×ボタンを押すか、あるいは、Alt + F4 キーを押すと、呼び出された
フォームを破棄して、メインメニューを再表示します。その処理を各イベント
ハンドラに記述します。

フォーム右上の×ボタンを押すか、Alt + F4 キーを押すと、Closingイベント
が発生しますので、まず、このイベントハンドラ
Private Sub frmMenu01_Closing() に終了処理を記述します。

Private Sub frmMenu01_Closing()は、ソースリスト画面の左上にあるコンボ
ボックスから(Base Class Events)を選択し、さらに、右上にあるコンボボッ
クスからclosingを選択すれば、自動的にメソッドの雛型を生成してくれます。

  Private Sub frmMenu01_Closing( _
  ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs _
  ) Handles MyBase.Closing

  End Sub

さらに、終了ボタン押下時のイベントハンドラ Private Sub btnEnd_Click()
にも、同じ終了処理を記述します。

◆終了処理1:メインメニューの再表示
メニューフォームインスタンスの参照は、Ownerプロパティに設定済ですから、
フォーム型のオブジェクト変数に、この参照を代入して、showメソッドを呼び
出して、メインメニューフォームを再表示します。

◆終了処理2:フォームクラスの破棄
メインメニューの再表示が終わったら、Disposeメソッドを呼び出して確実に
インスタンスを破棄します。念のため、破棄する前にインスタンスが存在する
ことを If Not Me Is Nothing で確認し、oMenuFormにNothingを代入して、
Disposeメソッドを呼び出します。インスタンスの破棄を保証するために、
Try … Finally … End のFinallyブロックにコーディングします。

    Try
      '終了処理1
      oMenuForm = Me.Owner
      oMenuForm.Show()
    Finally
      '終了処理2
      If Not Me Is Nothing Then
        oMenuForm = Nothing
        Me.Dispose()
      End If
    End Try

それでは、呼び出されるフォームクラスのソースリストを掲載します。

--【プログラムソースリスト】------------------------------------------
Public Class frmMenu01
  Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
  '自動生成部分省略
#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()

    Dim oMenuForm As Form

    Try
      oMenuForm = Me.Owner
      oMenuForm.Show()
    Finally
      If Not Me Is Nothing Then
        oMenuForm = Nothing
        Me.Dispose()
      End If
    End Try

  End Sub

End Class

----------------------------------------------------------------------
            ■■ 次号予告 第31号(9月20日発行予定) ■■
1. VB.NETワンポイント
2. フォームにメニューボタンを動的に生成する 3
======================================================================
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」ホームページに掲載されて
いる会社名・製品名等は、各社の登録商標または商標です。
======================================================================

Copyright© すぐ使えるADO.NET. All rights reserved.