環境は vb6, Windows XP です。
クラスを作ってプロパティやメソッドををつけていくと
○○クラス.××プロパティ(メソッド)とできます。
コンポーネントもクラスの一種なら
ComboBox1.Items.Add といった三段階で種類分けするといったこともできるのでしょうか。
コンポーネントもクラスの一種といった考え方自体が間違ってるのかもしれませんが、わからないので投稿しました。
よろしくお願いします。
> ComboBox1.Items.Add といった三段階で種類分けするといったこともできるのでしょうか。
何段階でもできますが・・・認識が逆の様な・・・
> ComboBox1.Items.Add
の場合、『クラス「Combobox」』に『Itemsプロパティ』がありますので、
「ComboBox1.Items」と言う指定ができます。
で、この『Itemsプロパティ』で参照できるが、この場合、別の『クラス』(オブジェクトって言ったほうが正しいかも・・・)になっています。
#「ComboBox1.Items」の場合は、Itemsコレクション・・・
で、『Itemsプロパティ』で参照できたクラス(Itemsコレクション)は、
『Addメソッド』を持っています。
その為、Itemsコレクション(つまり『ComboBox1.Items』)に対して「.Add」と指定できます。
自分で同じ様な事を行うなら・・・
「Class1」と「Class2」の2種類のクラスを準備する。
「Class1」にプロパティ「P1」を定義して、そのデータ型を「Class2」に指定する。
「Class2」に、メソッド「M2」を定義しておく。
とすれば、
> Class1のオブジェクト.P1.M2
の様な表記が可能です。
実際にやってみると、3段階で表記できました。
大吉末吉さんの説明を読ませていただくと、
ComboBox1クラス(オブジェクト)の変数(ここではコレクションになっている)に
別のクラスのメソッド(add)がComboBox1変数の値を変更してる。
といった解釈でいいんでしょうか。
クラス内の変数は外部に見えたらいけないらしいので、プロパティで
間接的に値を変えてるのでしょうか。
> クラス内の変数は外部に見えたらいけないらしいので、プロパティで
> 間接的に値を変えてるのでしょうか。
それ(隠蔽)は、別の話。
#たまたま、貴方が例に出していた「ComboBox1.Items.Add」の「Items
」がプロパティだっただけの事です。
可能なら(隠蔽を考えないなら)変数を直接公開しても構いませんし、
(オブジェクト型を戻す)関数でも構いません。
要するに、「オブジェクト型が参照できる」なら、(それが続く限り)何段階でも指定可能です。
追記
> ComboBox1クラス(オブジェクト)の変数(ここではコレクションになっている)に
> 別のクラスのメソッド(add)がComboBox1変数の値を変更してる。
『「変数の値」を変更している』と言うのは、ちょっと意味合いが違うかも。
「ComboBox1クラス」は、内部で(プルダウン項目を管理するための)コレクションオブジェクトを管理(保持)している。
で、「Itemsプロパティ」で、そのコレクションオブジェクトを、外部に公開している。
で、その「公開された(参照できた)」コレクションオブジェクトに対して、
(普通に)Addメソッドを実行できると言うことです。
#あれ?
#そういえば、VB6のComboBoxにItemsプロパティって無かった様な・・・
わかりやすい解説ありがとうございます。
解決しました。
サンプルは.NETを使いました。VB6で3段階になってるサンプルがすぐに思いつかなかったもので、
問題解決をややこしくしてすいませんでした。
ツイート | ![]() |