プロが教えるわが家の防犯対策術!

このようなステートメントがたくさんあります。
これはいったい何をしているのでしょうか?
Property Get と Property Setについても同様に分りません。
どなたか教えていただけないでしょうか。

A 回答 (6件)

理解困難ですか?



些細な事でも、わからなかったら遠慮なく聞いてくださいね。

Property関係を熟知するVBプログラマは、ぼくの周りにも少ないです。
流れがわかっていても、どうやったら効果的/有効的になるかがわかってないのです。だから、そういう人はPropertyを使用しようともしません。
むやみやたらにPropertyを使用するのはお奨めしないけど、たくさんのサンプルプログラムを作成し、慣れない関数を多用し、研究する努力が必要だと思います。
Propertyを使用しなくても済む部分をPropertyを使用してみるとかするのもいいと思います。
作成した後、本当にPropertyは必要なのか、Propertyを使用することによって、プログラミング的に効果的であったかなどの検証をして学ぶと、より早く身に着くと思います。


むずかしい分野ですが、がんばってくださいね。
    • good
    • 1
この回答へのお礼

大変ありがとうございます。
Getに関しては何とか理解できました。
本当に長い間付き合っていただきました。改めてお礼申し上げます。

あとは繰り返し自分でコードを書いてみて覚えるしかないと思います。
自分で使ってみて新たな疑問を作り出してまた改めて質問をさせていただきます。
その時はまたよろしくお願い致します。
本当にありがとうございました(深く深く礼)。

お礼日時:2001/11/21 14:54

>「Set/Letでプロパティに値を渡してあげている」という感じがします。


>どうでしょうか。

ズバリです。


>ここで新たな疑問が湧いてきました。
>「Getは値を取得する」とありましたが、取得とはどのような動きを指しているのでしょうか。取得と代入の違いがいまいち分っていません。


もっと疑問の生まれるような発言をしちゃいます。

主にProperty関係はユーザコントロールやクラスで使用するのですが、実際に簡単なものに触れてみましょう。
プロジェクトを作成してください。
プロジェクトウィンドウで右クリックして「追加」→「ユーザコントロール」を指定してください。
以下のコードをユーザコントロールにセットしてください。
-----------
Option Explicit
'おなじみのモジュール変数
Private m_Text As String

'Textプロパティの値の入力処理
Static Property Let Text(String1 As String)
  m_Text = String1
End Property
'Textプロパティの値の出力処理
Static Property Get Text() As String
  Text = m_Text
End Property


'プロパティの値を読む
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  m_Text = PropBag.ReadProperty("Text", "デフォルト文字")
End Sub

'プロパティの値を保持
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  PropBag.WriteProperty "Text", m_Text
End Sub
-----------
このユーザコントロールはTextプロパティを持つようになりました。
#2のARCさんのサンプルは別にPropertyでなくてもいい事です。変数で済んじゃいます。
しかしReadPropertiesとWritePropertiesを使用することがPropertyを生かす事になります。

上記のコードを張ったユーザコントロールが作成できたら、ユーザコントロールのコードの書かれたモジュールとユーザコントロールのフォームを閉じて、フォーム1を開いてください。画面左側のツールボックスの中に、ユーザコントロールが登場します。それを選択して、貼り付けてください。テキストプロパティを持ったユーザコントロールがフォーム1に作成されます。
テキストプロパティに”ああああ”をセットして、プロジェクトを閉じてください。それからもう一度プロジェクトを開いてみてください。フォームの中のユーザコントロールに”ああああ”が保持されているはずです。
保持はWritePropertiesで行われています。
起動時にReadPropertiesが行われて、m_Textに”ああああ”がセットされます。
デザイン時にユーザコントロールを選択すると、プロパティウィンドウにユーザコントロールの一覧が出ますよね?それはProperty Get があるおかげで、表示されてるのです。

ためしにフォーム1にコマンドボタン1を作成し
Private Sub Command1_Click()
  MsgBox UserControl1.Text
End Sub
として、F8を連打(ステップ実行)して見てください。
MsgBoxを表示するタイミングで、ユーザコントロールのProperty Get Textを通るはずです。
MsgBoxはUserControl1のテキストプロパティの内容を表示するために、テキストプロパティの内容を要求します。要するにテキストプロパティの取得をするわけです。

今度はフォーム1にコマンドボタン2を作成し
Private Sub Command2_Click()
  UserControl1.Text = Now()
End Sub
としてステップ実行してみてください。
コマンドボタン2を押した時、テキストプロパティのセットですので Property Let Textを通ります。
これでユーザコントロールのm_Text変数が更新されていますので、今度はコマンドボタン1を押したらコマンド2を押した時間が表示されるはずです。

このプログラム中でセットした値は、WritePropertiesに反映されません。デザイン時に設定した値を保持します。
ですので、次回起動した時もテキストプロパティは"ああああ"という値を持っています。


もっと難解になったでしょうか?

>理解は進んだと感じていますがなんか混乱してきました(汗)。
>あきれずに教えてください!
プロパティの質問はC++に共通する部分があります。すごく奥の深いお題目です。用意に説明できるものでは無いと思ってます。ぼくも完全に極めているわけではないですが、バシバシ質問してください。

これは自己紹介にも書いているのですが、こうやって答える事が自分自身のスキルアップにつながると思ってます。

お互いがんばりましょう。
    • good
    • 0

まず最初に、標準コントロール以外の使用方法では、厳しいことを言ってすいませんでした。

。。しかしあのような学習方法が「人に聞かないでも推測でできるようになる」というための学習方法だと思って言わせていただきました。

このProperty Get/Let/Setはサンプルはあちこちに落ちてますが、説明が詳しく出てる書物は少ないので、わかりづらいと思います。
>しつこくてすみませんが
(・_・三・_・)ウウン
そんなこたぁありません。向上心があることはいい事です。そのしつこさが発展につながると思います。
ぼくもVBを覚える時には、今では恥ずかしくなってしまうような事をたくさん聞きまくってました。

>Getは代入と同じニュアンスでとらえてよろしいのですか?
>Set/Letに関してもオブジェクト変数に値をセットする感覚でしょうか?
ズバリです。

犬オブジェクトのプロパティに
「名前」
「首輪の有無」
「吠え方」
「おしっこの仕方」
「買主の名前」
があった時、
Set/Letで値やオブジェクトを代入
Getで値やオブジェクトを取得
します。

Set/Letの使い分けですが、型によって違います。
例えば普通のプログラム内で
Dim i As Long
Dim Frm As Form
などがあったとき、これらの変数は
i = 5
Set Frm = Form1
などとして使用します。

この使用方法と一緒で、
変数にオブジェクトを代入する時(普通のプログラムでSetが必要な型) → Set
変数に値を代入する時(普通のプログラムでSetが必要の無い型) → Let
として区別できます。

理解できたでしょうか?
まだわからなかったら、とことんお付き合いしますよ。

この回答への補足

>> まず最初に、標準コントロール以外の使用方法では、厳しいことを言ってすいませんでした。。。しかしあのような学習方法が「人に聞かないでも推測でできるようになる」というための学習方法だと思って言わせていただきました

ありがとうございました。
今、コントロール相手に格闘していますが、少しずつ理解ができるようになってきました。

本題のほうに入らせていただきます。

>変数にオブジェクトを代入する時(普通のプログラムでSetが必要な型) → Set
>変数に値を代入する時(普通のプログラムでSetが必要の無い型) → Let

これに関して僕なりの考えをいいますと、
「Set/Letでプロパティに値を渡してあげている」という感じがします。
どうでしょうか。

ここで新たな疑問が湧いてきました。
「Getは値を取得する」とありましたが、取得とはどのような動きを指しているのでしょうか。取得と代入の違いがいまいち分っていません。

理解は進んだと感じていますがなんか混乱してきました(汗)。
あきれずに教えてください!お願いします(深く深く礼)。

補足日時:2001/11/14 17:50
    • good
    • 0

おおーレスがあったのですねー


気が付きませんでしたー
_(..)_ごめんなさい。。。

MSDNのサンプルを見てくれたのですねー
そしたら次の段階を説明します。

まず前提に・・・

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
これの意味はわかりますか?
構造体ですね。
これを宣言してると
Dim workRect As RECT
RECT構造をもったworkRect変数
として、プログラム内で宣言することができます。

ユーザーコントロール、クラスファイルは変数ではありません。
ユーザーコントロールはオブジェクトであり
クラスファイルはクラスとして使用します。
ちょっと難しいかも知れませんが、変数以外のものとして捕らえてください。
コントロールの一つにテキストボックスがありますよね?
あれにも属性があります。
Aiignment
Appearance
BackColor
Text
などです。
これらはテキストボックスの属性(プロパティ)を表したり、値をセットすることができます。
それが Property [Get][Set/Let]です。


イメージとしては
Private Type TextBox
  Aiignment As Long
  Appearance As Long
  BackColor As Long
  Text As String
End Type
こんな感じでしょうか?

しかしTextBoxは変数の構造ではなく、オブジェクトの構造ですので、こういう書き方ではダメなのです。
そこで値を取得する時は
Property [Get]
値をセットする時は
Property [Set/Let]
を使用した内部構造を作成しなければなりません。

大まかに言うと、変数でいう構造体みたいなものです。(大まか過ぎるかな?)

少しつかめました?
疑問があったらレスください。

この回答への補足

ありがとうございます。
だんだん理解が進んできました。
もう少し聞きたいのですが、

Getは代入と同じニュアンスでとらえてよろしいのですか?
Set/Letに関してもオブジェクト変数に値をセットする感覚でしょうか?

しつこくてすみませんが、宜しくお願い致します。

補足日時:2001/11/12 13:20
    • good
    • 0

フォームやクラスモジュールに、新たにプロパティを追加するときに使います。



例えば、管理者モードと利用者モードの二つのふるまい方をする入力フォームを作りたいとしましょう。

仕様としては、入力フォーム内部では、mMode という変数を参照して、mModeが0のときは利用者モードとしてふるまい、mModeが1のときは管理者モードとしてふるまうものとします。

入力フォーム外部から動作モードを切り替えるには、Modeプロパティに0か1かを指定する物とします。また、それ以外の値を指定したときは、エラーメッセージを表示するとします。

このような場合は、以下のようにプログラムを組みます。(コードを見たほうが説明するより分かりやすいと思うんで)

入力フォームのコード
'(Genaral)(Declarations)
Dim mMode As Long '動作モード

'Modeプロパティ
Property Let Mode(Mode_ As Long) 'Modeプロパティを設定したときの動作
  Select Case Mode_
    Case 0
      mMode = 0 '利用者モードに切り替える
    Case 1
      mMode = 1 '管理者モードに切り替える
    Case Else
      'エラーメッセージを吐く
      Msgbox "指定した動作モードは定義されていないです。"
  End Select
End Property

Property Get Mode() As Long 'Modeプロパティを取得したときの動作
  Mode = mMode 'Modeプロパティの値として、mMode変数の値を返す。
End Property

Sub Form_Initialize()
  mMode=0'動作モードの初期値は利用者モード
End Sub

Sub フォーム中のコード()

  Select Case mMode
    Case 0
      '利用者モードのときのふるまいを記述
    Case 1
      '管理者モードのときのふるまいを記述
  End Select

End Sub

+-+-+-+-+-+-+-+-
入力フォームを呼び出すコード(Visual Basic用のコード。VBA用のコードではない)
Sub 入力フォームを管理者モードで開く()
  Load 入力フォーム 'フォームを準備
  入力フォーム.Mode = 1 '管理者モードに切り替え
  入力フォーム.Show 'フォームを表示
End Sub


尚、Property Let と Property Set は機能的には同じ物です。
Property Let は 変数をプロパティに指定するときに使い、Property Set はオブジェクトをプロパティに指定するときに使います。
Property Get は 変数であっても、オブジェクトであっても使えます。
    • good
    • 0

主にユーザコントロールやクラスを作成するときに使用するのですが、フォームでも使用可能です。



デザイン画面でプロパティウィンドウってありますよね。
あれにオリジナルのプロパティを追加するものだと思ってください。

MSDNにサンプルも入ってますよ。デバッグした方がつかめるかも?
ぼくのマシンでは
\Program Files\Microsoft Visual Studio\MSDN\2000OCT\1041\SAMPLES\VB98\
にサンプルがあります。その中でもDatAwareって言うのが一番わかりやすいと思います。
ちなみにMSDNのバージョンによって2000OCT\1041ではないと思いますので、注意してください。
もしサンプルがなかったらMSDNのCDに入ってると思います。SAMPLESでCD内を検索したら見つかると思います。

ユーザーコントロールやクラスファイルの存在するサンプルには、全てProperty [Let/Get]があるはずです。

この回答への補足

ありがとうございます。
サンプルでデバック実行してみました。
なんとなくわかったような分らないような感じです。

>>ユーザーコントロールやクラスファイルの存在するサンプルには、全て     Property [Let/Get]があるはずです

これの理由を教えていただきませんでしょうか。

申し訳ありません。お願い致します。

補足日時:2001/11/08 18:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!