none
クラスを使ってComboBoxへの書き込み RRS feed

  • 質問

  •  

    フォーム1、フォーム2・・・と複数のフォームがあり、それぞれのフォームにはComboBoxを配置しております

    各フォームでComboBoxのデータはファイルから呼び込むようにしていますが、クラスでComboBoxへのデータ書き込みをしたいのですが?

    どなたか、ご指導をお願いします。(VB2003 XP)

    2008年2月26日 0:56

回答

  • えー、「外池」です。ご趣旨、了解です。

     

    大きく分けて、二つの方法があると思います。

    -----

    せっかく「クラス」という呼び方をされていますので、まず、ComboBoxは既存の与えられている部品なわけですが、これを流用した、独自の爺様仕様ComboBoxを作ることができます。ComboBoxというクラスを継承して、ファイルから呼び込む機能を書き加えて、新たな爺様仕様ComboBoxというクラスにするわけです。この爺様仕様ComboBoxクラスは、きちんと設定すれば、従来のComboBoxと同様に部品のリストの画面に現れてフォームに貼り付ける操作ができるようになります。

     

    ただ、すいません、私は具体的にこの手法を使ったことが今のVBではありませんので、特に後半の「設定」の部分のアドバイスができないと思います。(古いVBではあるのですが) 継承自体はそれほど難しくありません。

     

    Code Snippet

    Public Class JIISamaComboBox

    '継承:ほとんど何もプログラムを書かなくてもComboBoxの従来機能は引き継がれる。

    Inherits ComboBox

     

     

    Public Sub DataRead(ByVal FilePath As String)

    'ここにファイルからデータを呼び込むプログラムを書く

    End Sub

    End Class

     

     

    追記:「設定」の部分ですが、簡単でした。

    1)クラスを追加して、2)上述のような要領で書く。とにかく、最低限エラーが無い範囲で書いて、3)一度ビルドする。

    そうしますと、ツールボックスに歯車の絵ですが、JIISamaComboBoxが現れますので、これを使ってFormに貼り付けられます。

    ------

    一方で、個々の書き込み先のComboBoxと、読み込むファイルを指定して、データの読み込み操作だけを行わせるひとつのサブルーチンを作り、各フォームから呼び出す方法も可能です。

     

    プログラム全体から呼び出せるModuleをひとつ追加して、

    Code Snippet

    Public Sub ReadDataForComboBox(ByVal cbo As ComboBox, ByVal FilePath As String)

    'ここにファイルからデータを呼び込むプログラムを書く

    '従来のプログラムでComboBox1.○○というように

    'プロパティー○○を指定して設定していたものは、

    'cbo.○○として使うことができる。

    End Sub

     

     

    としておき、各フォームでは、ReadDataForComboBox(ComboBox1, "test.txt")という一行で済むようになります。

     

    ミソは、ComboBoxというようなオブジェクトも、変数に保持させることができる、ということです。各フォームにおいてComboBox1という名前がついているように見えますが、実はこれも変数の名前です。

     

    画面に現れているひとつのComboBox、これはひとつの実体というか個体であって「インスタンス」と呼ばれます。画面に複数のComboBoxが現れていれば、その数だけ異なった個体「インスタンス」があることになります。で、ComboBox1という変数は、ひとつの「インスタンス」を「指して」います。cbo=ComboBox1というような代入の操作を行うと、cboも同じ「インスタンス」を「指す」ようになります。変数は別なのに、ComboBox1.○○としてプロパティーを操作しても、cbo.○○としてプロパティーを操作しても、同じ「インスタンス」に対して変化が現れることになります。

     

     

     

    2008年2月26日 4:09

すべての返信

  • 外池です。すいません、ご質問の趣旨をもう少し詳しくご説明ください。

     

    ComboBoxに表示する基のデータを、ファイルではなく、クラス(というか、オブジェクト)で保持してそこから読み出して表示させたい、というご趣旨ですか?

     

     

     

    2008年2月26日 1:07
  • 池谷様

    説明不足で申し訳ございません。

     

    フォーム1でComboBoxの入力・編集内容をファイルに格納しています。

    その他の複数フォームでのComboBox内にファイルから呼び込んだ内容を表示します。

    そのとき、それぞれのフォームごとにComboBoxにファイルから呼び込んだ内容を書き込んでいます。

     

    フォームごとに同じコードを書いて処理をしていますが、これをクラス内で処理をすれば、一つのクラスを複数のフォームで活用できるのではないかと思っています。

     

    還暦になってからの勉強で、分からないことが多く、地方の田舎では、学校等もなく、書籍に頼って勉強をすることしかできません。

    フォームの中のComboBoxをほかの場所(クラス)で操作する方法がわかりません

     

    基本がマスターできておりませんが、ご指導をよろしくお願いします。

    2008年2月26日 3:32
  • えー、「外池」です。ご趣旨、了解です。

     

    大きく分けて、二つの方法があると思います。

    -----

    せっかく「クラス」という呼び方をされていますので、まず、ComboBoxは既存の与えられている部品なわけですが、これを流用した、独自の爺様仕様ComboBoxを作ることができます。ComboBoxというクラスを継承して、ファイルから呼び込む機能を書き加えて、新たな爺様仕様ComboBoxというクラスにするわけです。この爺様仕様ComboBoxクラスは、きちんと設定すれば、従来のComboBoxと同様に部品のリストの画面に現れてフォームに貼り付ける操作ができるようになります。

     

    ただ、すいません、私は具体的にこの手法を使ったことが今のVBではありませんので、特に後半の「設定」の部分のアドバイスができないと思います。(古いVBではあるのですが) 継承自体はそれほど難しくありません。

     

    Code Snippet

    Public Class JIISamaComboBox

    '継承:ほとんど何もプログラムを書かなくてもComboBoxの従来機能は引き継がれる。

    Inherits ComboBox

     

     

    Public Sub DataRead(ByVal FilePath As String)

    'ここにファイルからデータを呼び込むプログラムを書く

    End Sub

    End Class

     

     

    追記:「設定」の部分ですが、簡単でした。

    1)クラスを追加して、2)上述のような要領で書く。とにかく、最低限エラーが無い範囲で書いて、3)一度ビルドする。

    そうしますと、ツールボックスに歯車の絵ですが、JIISamaComboBoxが現れますので、これを使ってFormに貼り付けられます。

    ------

    一方で、個々の書き込み先のComboBoxと、読み込むファイルを指定して、データの読み込み操作だけを行わせるひとつのサブルーチンを作り、各フォームから呼び出す方法も可能です。

     

    プログラム全体から呼び出せるModuleをひとつ追加して、

    Code Snippet

    Public Sub ReadDataForComboBox(ByVal cbo As ComboBox, ByVal FilePath As String)

    'ここにファイルからデータを呼び込むプログラムを書く

    '従来のプログラムでComboBox1.○○というように

    'プロパティー○○を指定して設定していたものは、

    'cbo.○○として使うことができる。

    End Sub

     

     

    としておき、各フォームでは、ReadDataForComboBox(ComboBox1, "test.txt")という一行で済むようになります。

     

    ミソは、ComboBoxというようなオブジェクトも、変数に保持させることができる、ということです。各フォームにおいてComboBox1という名前がついているように見えますが、実はこれも変数の名前です。

     

    画面に現れているひとつのComboBox、これはひとつの実体というか個体であって「インスタンス」と呼ばれます。画面に複数のComboBoxが現れていれば、その数だけ異なった個体「インスタンス」があることになります。で、ComboBox1という変数は、ひとつの「インスタンス」を「指して」います。cbo=ComboBox1というような代入の操作を行うと、cboも同じ「インスタンス」を「指す」ようになります。変数は別なのに、ComboBox1.○○としてプロパティーを操作しても、cbo.○○としてプロパティーを操作しても、同じ「インスタンス」に対して変化が現れることになります。

     

     

     

    2008年2月26日 4:09
  • 外池 様

     

    お名前を間違え大変申し訳ございません。

     

    貴重なアドバイスありがとうございました。

     

    早速、両方を勉強してみたいと思います。

     

    ありがとうございました。

    2008年2月26日 5:33
  • こんにちは。中川俊輔 です。

     

    外池さん、回答ありがとうございます。

     

    田舎の爺さん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、外池さんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    田舎の爺さんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

     

    2008年3月4日 6:18