トップ回答者
クラスを使ってComboBoxへの書き込み

質問
回答
-
えー、「外池」です。ご趣旨、了解です。
大きく分けて、二つの方法があると思います。
-----
せっかく「クラス」という呼び方をされていますので、まず、ComboBoxは既存の与えられている部品なわけですが、これを流用した、独自の爺様仕様ComboBoxを作ることができます。ComboBoxというクラスを継承して、ファイルから呼び込む機能を書き加えて、新たな爺様仕様ComboBoxというクラスにするわけです。この爺様仕様ComboBoxクラスは、きちんと設定すれば、従来のComboBoxと同様に部品のリストの画面に現れてフォームに貼り付ける操作ができるようになります。
ただ、すいません、私は具体的にこの手法を使ったことが今のVBではありませんので、特に後半の「設定」の部分のアドバイスができないと思います。(古いVBではあるのですが) 継承自体はそれほど難しくありません。
Code SnippetPublic Class JIISamaComboBox
'継承:ほとんど何もプログラムを書かなくてもComboBoxの従来機能は引き継がれる。
Inherits ComboBox
Public Sub DataRead(ByVal FilePath As String)
'ここにファイルからデータを呼び込むプログラムを書く
End Sub
End Class
追記:「設定」の部分ですが、簡単でした。
1)クラスを追加して、2)上述のような要領で書く。とにかく、最低限エラーが無い範囲で書いて、3)一度ビルドする。
そうしますと、ツールボックスに歯車の絵ですが、JIISamaComboBoxが現れますので、これを使ってFormに貼り付けられます。
------
一方で、個々の書き込み先のComboBoxと、読み込むファイルを指定して、データの読み込み操作だけを行わせるひとつのサブルーチンを作り、各フォームから呼び出す方法も可能です。
プログラム全体から呼び出せるModuleをひとつ追加して、
Code SnippetPublic 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.○○としてプロパティーを操作しても、同じ「インスタンス」に対して変化が現れることになります。
すべての返信
-
池谷様
説明不足で申し訳ございません。
フォーム1でComboBoxの入力・編集内容をファイルに格納しています。
その他の複数フォームでのComboBox内にファイルから呼び込んだ内容を表示します。
そのとき、それぞれのフォームごとにComboBoxにファイルから呼び込んだ内容を書き込んでいます。
フォームごとに同じコードを書いて処理をしていますが、これをクラス内で処理をすれば、一つのクラスを複数のフォームで活用できるのではないかと思っています。
還暦になってからの勉強で、分からないことが多く、地方の田舎では、学校等もなく、書籍に頼って勉強をすることしかできません。
フォームの中のComboBoxをほかの場所(クラス)で操作する方法がわかりません
基本がマスターできておりませんが、ご指導をよろしくお願いします。
-
えー、「外池」です。ご趣旨、了解です。
大きく分けて、二つの方法があると思います。
-----
せっかく「クラス」という呼び方をされていますので、まず、ComboBoxは既存の与えられている部品なわけですが、これを流用した、独自の爺様仕様ComboBoxを作ることができます。ComboBoxというクラスを継承して、ファイルから呼び込む機能を書き加えて、新たな爺様仕様ComboBoxというクラスにするわけです。この爺様仕様ComboBoxクラスは、きちんと設定すれば、従来のComboBoxと同様に部品のリストの画面に現れてフォームに貼り付ける操作ができるようになります。
ただ、すいません、私は具体的にこの手法を使ったことが今のVBではありませんので、特に後半の「設定」の部分のアドバイスができないと思います。(古いVBではあるのですが) 継承自体はそれほど難しくありません。
Code SnippetPublic Class JIISamaComboBox
'継承:ほとんど何もプログラムを書かなくてもComboBoxの従来機能は引き継がれる。
Inherits ComboBox
Public Sub DataRead(ByVal FilePath As String)
'ここにファイルからデータを呼び込むプログラムを書く
End Sub
End Class
追記:「設定」の部分ですが、簡単でした。
1)クラスを追加して、2)上述のような要領で書く。とにかく、最低限エラーが無い範囲で書いて、3)一度ビルドする。
そうしますと、ツールボックスに歯車の絵ですが、JIISamaComboBoxが現れますので、これを使ってFormに貼り付けられます。
------
一方で、個々の書き込み先のComboBoxと、読み込むファイルを指定して、データの読み込み操作だけを行わせるひとつのサブルーチンを作り、各フォームから呼び出す方法も可能です。
プログラム全体から呼び出せるModuleをひとつ追加して、
Code SnippetPublic 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.○○としてプロパティーを操作しても、同じ「インスタンス」に対して変化が現れることになります。