コンボボックスをクラスを使って予めAccessのDBを入れて置きたい

タグの編集
投稿者 ロト君  (社会人) 投稿日時 2020/2/29 16:53:53
環境:

VB2019
Access2003

内容:

最近、管理ソフトを作ろうとしています。

その際に、コンボボックスを使って、Access2003の*.mdbからテーブルを読み込んでコンボボックスにデータを入れ込んでいます。

しかし、色々なフォームで同じコンボボックスの様なものを使う際にはクラスを作っておく方が良いとネットなどで知りました。

クラスを作らずにフォームにコンボボックスを張ってPrivate sub cmb1()でコンボボックスの内容を予め、*.mdbのテーブルを表示する事は出来ていますが、任意(独自)のクラスで予め、データを入れたコンボボックスを作る事が出来ていません。

Public Class ComboBoxEx の様な任意のクラスに予めデータを入れたコンボボックスを作る事は可能でしょうか?

可能な場合は作り方を知りたいです。
宜しくお願い致します。
投稿者 るきお  (社会人) 投稿日時 2020/2/29 20:02:35
任意のデータがあらかじめ設定されている独自のComboBoxを作成することは可能です。
たとえば、下記のようにプログラムします。

このプログラムは、Form1のEnd Classの下に追加しても良いですが、プロジェクトに新しい項目としてクラスを追加して独立したファイルにプログラムするのがベターです。

Public Class ComboBoxEx
    Inherits ComboBox

    Public Sub New()
        If AppDomain.CurrentDomain.FriendlyName <> "DefaultDomain" Then
            'デザイン時でなければ内容をセットする。 
            Me.cmb1()
        End If

    End Sub

    ''' <summary> 
    ''' コンボボックスの内容を予め、*.mdbのテーブルを表示する 
    ''' ※このサンプルでは固定値をセットします。 
    ''' </summary> 
    Private Sub cmb1()
        Me.Items.Add("明治")
        Me.Items.Add("大正")
        Me.Items.Add("昭和")
        Me.Items.Add("平成")
        Me.Items.Add("令和")
    End Sub

End Class


プログラム後、[ビルド] - [リビルド]を実行してから、フォームのデザイナーを表示すると、ツールボックスの一番上に、プロジェクト名のタブが追加されておりその中にComboBoxExが表示されています。後は、普通のTextBoxやButtonと同じようにフォームにぺたぺた貼り付けるだけです。

ただ、今回のように共通の機能(今回の場合mdbからの読み込み)があるからという理由で独自のコントロールを作成することはお勧めしません。共通の機能があるのであれば、共通の読み込み処理を作成して、それを呼び出すほうが良いです。
理由はそのほうがシンプルだからです。
投稿者 ロト君  (社会人) 投稿日時 2020/3/1 11:50:23
るきお さん。
返答ありがとうございます。

問題が、解決出来ました。

プロジェクトにクラスを追加して作成するようにいました。

多くの種類のコンボボックスを作る場合は、かなりのクラス数になりそうですが、頑張ります!!

ありがとうございます!
投稿者 るきお  (社会人) 投稿日時 2020/3/1 18:52:31
解決してよかったです。

前の投稿にも書きましたように、今回の場合、この方法はお勧めではありませんので、複雑になり過ぎないようにご注意ください。

特に問題になるのは保守性ですので、後になって機能を追加したり、バグを修正したり、再利用したりすることが困難にならないようにお気をつけください。