コントロールのプロパティ作成


だん  2007-03-30 22:10:06  No: 135946

今回は、VB6でコントロールを作成してみようと思っています。
そこで、まず、プロパティを作成しようと考えました。
とはいうものの、コーディング方法がわからないので、
ActiveXコントロールインターフェイスウィザードを
使用して、Fontプロパティを作ってみました。
その結果、以下のようなコードが追加されていました。

01 : '警告! 以下のコメント行を変更または削除しないでください !
02 : 'MappingInfo=UserControl,UserControl,-1,Font
03 : Public Property Get Font() As Font
04 :     Set Font = UserControl.Font
05 : End Property
06 : 
07 : Public Property Set Font(ByVal New_Font As Font)
08 :     Set UserControl.Font = New_Font
09 :     PropertyChanged "Font"
10 : End Property
11 : 
12 : 'ユーザー コントロールのプロパティを初期化します。
13 : Private Sub UserControl_InitProperties()
14 :     Set UserControl.Font = Ambient.Font
15 : End Sub
16 : 
17 : '記憶領域からプロパティ値を読み込みます。
18 : Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
19 : 
20 :     Set UserControl.Font = PropBag.ReadProperty("Font", Ambient.Font)
21 : End Sub
22 : 
23 : '記憶領域にプロパティ値を書き込みます。
24 : Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
25 : 
26 :     Call PropBag.WriteProperty("Font", UserControl.Font, Ambient.Font)
27 : End Sub

そこで、質問です。
・01行目の内容の対象は02行目だけなのか?
・02行目が意味を持つ意味とは?
・03行目と07行目はプロパティの読み出しと書き込みですよね。
・13行目、18行目、24行目が初めて目にするイベントなんで、
  教えていただきたいです。

以上、よろしくお願いいたします。


魔界の仮面弁士  2007-03-31 01:31:37  No: 135947

> ・01行目の内容の対象は02行目だけなのか?
02行目は、03行目/07行目に対する、いわゆる「メタ情報」です。
削除してもプログラム的には問題ありませんが、
ウィザードを再度実行した場合に、関連情報がクリアされます。

> ・02行目が意味を持つ意味とは?
02行目は、ウィザードのために使われる情報です。
具体的には、Font プロパティが UserControl.Font に対して
マッピングされている、ということを示しています。

> ・03行目と07行目はプロパティの読み出しと書き込みですよね。
そうです。

> ・13行目、18行目、24行目が初めて目にするイベントなんで、
>   教えていただきたいです。
まずは、VB6のヘルプを読んでみましょう。
その中で、わからない点を具体的に質問してください。

読むべきトピックは幾つかありますが、まずは取っ掛かりとして、

[Visual Basic ドキュメント]
  [Visual Basic の使用方法]
    [コンポーネント ツール ガイド]
      [ActiveX コンポーネントの作成方法]
        [ActiveX コントロールの作成技術]
          [コントロールの基本的な作成方法]
            [コントロールの有効期間およびキー イベントについての知識]

と、その周辺のトピックを読んでみてください。
大まかな流れがわかるかと思います。


だん  2007-04-10 00:38:17  No: 135948

1行目、2行目がメタ情報であることは理解いたしました。

また、各プロパティも理解いたしました。

> ・13行目、18行目、24行目が初めて目にするイベントなんで、
>   教えていただきたいです。
なんですが、MSDNで、
どんなイベントなのかは、理解したつもりですが、
実際にデバッグしてみると、CALLされないのです。
(Init...はCALLされています。)

また、ユーザコントロールのフォントプロパティを
指定された場合に、各テキストボックスなどの、
フォントを指定しようとしていますが、
上手く動作していません。

フォントプロパティは以下のように作成しています。
Public Property Get Font() As Font

    Set Font = UserControl.Font

End Property
Public Property Set Font(ByVal New_Font As Font)

    Set UserControl.Font = New_Font
    Set UserControl.txtAAA.Font = New_Font
    Set UserControl.txtBBB.Font = New_Font
    PropertyChanged "Font"

End Property

皆様のご指摘お待ちしております。


K.J.K.  2007-04-10 01:01:03  No: 135949

提示された2つのイベントプロシージャの内容を、

Private Sub UserControl_InitProperties()
    Set Font = Ambient.Font
End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
    Set Font = PropBag.ReadProperty("Font", Ambient.Font)
End Sub

のようにしておくとか。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加