DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33321 / inTopicNo.1)  プロパティウィンドウに表示されないプロパティとは
  
□投稿者/ ミント 一般人(1回)-(2016/04/07(Thu) 16:20:31)
  • アイコン環境/言語:[環境(Win7 64bit)使用言語(VB6,VBNET)] 
    分類:[VB6以前] 

    【環境】
    OS:WIN7
    IDE:VisualStudio6.0 および VisualStudio2008
    言語:VB6.0 および VB.NET

    はじめまして(VB初心者です)

    VB6とVBNETを触っていて、プロパティウィンドウには表示されていないけど、
    コードでは表示されるプロパティがあることに気づきました。

    例)VB6のPictureBoxコントロールにあるHdcやImage
    プロパティウィンドウには表示されませんが、
    Picture1.Hdc や Picuture1.Image などとコード画面では表示されます。

    どういう種類のプロパティなんでしょうか??

    VBNETでも同様なのでしょうか?
引用返信 削除キー/
■33322 / inTopicNo.2)  Re[1]: プロパティウィンドウに表示されないプロパティとは
□投稿者/ 魔界の仮面弁士 大御所(1014回)-(2016/04/07(Thu) 17:08:52)
  • アイコン2016/04/07(Thu) 17:38:09 編集(投稿者)

    No33321に返信(ミントさんの記事)
    > VB6とVBNETを触っていて、プロパティウィンドウには表示されていないけど、
    > コードでは表示されるプロパティがあることに気づきました。

    その逆に、コードでアクセスできないプロパティもありますね。

    たとえば VB6 においては、クラスモジュール(Class1)に対して
    『DataBindingBehavior プロパティ』が表示されていますが、
    これはコードからは利用できません。
    Timer コントロールの『Left プロパティ』なども同様です。

    また、フォームを右クリックした際に表示される「コントロールのロック」も、
    内部的には『LockControls プロパティ』として定義されています。
    これに至っては、コードからもデザイナ画面からもアクセスできませんが、
    保存された *.frm ファイル内には、LockControls というメンバーが記載されます。
    (このため VB6 の Form には、「LockControls」という名前の変数や
     プロシージャを定義することができないという制限があります)


    この手の話は、.NET においても存在します。

    たとえば、各コントロールの『AccessibilityObject プロパティ』は、
    コードからのみアクセス可能で、デザイン時には利用できません。

    逆に、デザイン時のみアクセス可能な例としては
    ToolTip や ErrorProvider のコンポーネントがあります。
    たとえば「ErrorProvider1」をフォームに貼ると、TextBox 等に
     "ErrorProvider1 の Error"
     "ErrorProvider1 の IconAlignment"
     "ErrorProvider1 の IconPadding"
    などが現れますね。あとは TableLayoutPanel も同様。


    > どういう種類のプロパティなんでしょうか??
    説明を端折るなら、「デザイン時専用プロパティ」とか
    「実行時専用プロパティ」といったところですね。

    仕組み的には、Extender オブジェクト(VB6)だとか IExtenderProvider (.NET)だとか
    プロシージャ属性(VB6)だとか、EditorBrowsableAttribute (.NET)だとか
    デザイナー用インターフェイス実装だとか、それぞれに応じて
    幾通りかのテクノロジーが使われていますが、細かい説明は割愛。


    > VBNETでも同様なのでしょうか?
    実現するための仕組みは異なりますが、
    同様の機能を持っていると考えて良いかと。
引用返信 削除キー/
■33323 / inTopicNo.3)  Re[1]: プロパティウィンドウに表示されないプロパティとは
□投稿者/ 魔界の仮面弁士 大御所(1015回)-(2016/04/07(Thu) 17:32:53)
  • アイコンNo33321に返信(ミントさんの記事)
    > VB6とVBNETを触っていて、プロパティウィンドウには表示されていないけど、
    > コードでは表示されるプロパティがあることに気づきました。
    > どういう種類のプロパティなんでしょうか??

    実装例を挙げてみましょうか。以下、【VB6】を前提にしています。


    (1) [標準 EXE プロジェクト] を新規作成します。

    (2) メニューの[プロジェクト]-[ユーザーコントロールの追加]で
     UserControl1 をプロジェクトに追加します。

    (3) UserControl1 に、以下のコードを貼り付けます。

    '-------------------------------------
    Option Explicit

    Public Property Get Sample1() As OLE_HANDLE
      Sample1 = ObjPtr(Me)
    End Property
    Public Property Let Sample1(ByVal v As OLE_HANDLE)
    End Property

    Public Property Get Sample2() As OLE_HANDLE
      Sample2 = ObjPtr(Me)
    End Property
    Public Property Let Sample2(ByVal v As OLE_HANDLE)
    End Property
    '-------------------------------------

    (4) UserControl1 のコードエディタとデザイナを閉じてから
     Form1 のデザイナ画面を開きます。

    (5) ツールボックスにある "UserControl1" をフォームに貼ります。
     デザイナ上で、貼ったコントロールを選択してみると、先ほどの
     「Sample1 プロパティ」「Sample2 プロパティ」が見えるはずです。

    (6) Form1 のデザイナを閉じて、UserControl1 のコードエディタを開いてから
     メニューの[ツール]-[プロシージャ属性]を選択します。

    (7) 表示されたダイアログの『名前』欄から、"Sample1" を選択し、
     [詳細]ボタンを押して、『このメンバを非表示にする』をチェックして
     [OK]で閉じます。

    (8) Form1 を開きなおし、先ほど貼ったコントロールから、
     Sample1 プロパティが見えなくなっていることを確認してください。
     (Sample2 はまだ見えている状態です)

    (9) 再度、プロシージャ属性 ダイアログを開いて、今度は "Sample2" で
     『プロパティ ウィンドウに表示しない』を指定します。

    (10) Form1 のデザイナを開きなおして見ると、Sample1 と Sample2 の
     両方が見えなくなっている状態になっています。

    (11) この状態で、Form1 のコードエディタを開き、これらのプロパティが
     アクセスできるか確認してみてください。Sample1 と Sample2 の
     いずれにもアクセスできますが、入力ヒント(IntelliSense)に表示されるのは
     Sample2 の方だけだと思います。

    (12) さらに [F2]キーで、「オブジェクト ブラウザ」画面を開き、
     右クリックメニューから『非表示のメンバを表示』をチェックします。

    (13) 再度、Form1 のコードエディタを開き、IntelliSense を見てみると、
     "Sample1" の方だけ、淡色表示になっていることが分かるかと思います。
引用返信 削除キー/
■33324 / inTopicNo.4)  Re[2]: プロパティウィンドウに表示されないプロパティとは
□投稿者/ ミント 一般人(2回)-(2016/04/07(Thu) 17:33:40)
  • アイコンNo33322に返信(魔界の仮面弁士さんの記事)

    魔界の仮面弁士さん、丁寧な回答ありがとうございました^^

    > その逆に、コードでアクセスできないプロパティもありますね。
    これについては、まったく気づきませんでした。
    参考になる例なども提示いただき、ありがとうございます。


    >>どういう種類のプロパティなんでしょうか??
    > 説明を端折るなら、「デザイン時専用プロパティ」とか
    > 「実行時専用プロパティ」といったところですね。
    端的に回答いただき、ありがとうございます。
    難しい仕様はちょっと横において、まずはそういうものなんだと理解します。


    >>VBNETでも同様なのでしょうか?
    > 実現するための仕組みは異なりますが、
    > 同様の機能を持っていると考えて良いかと。
    VBNETのほうでは未確認でしたが、当然あるものと思っていました。
    回答、ありがとうございます。


引用返信 削除キー/
■33325 / inTopicNo.5)  Re[2]: プロパティウィンドウに表示されないプロパティとは
□投稿者/ ミント 一般人(3回)-(2016/04/07(Thu) 17:37:45)
  • アイコンNo33323に返信(魔界の仮面弁士さんの記事)

    >実装例を挙げてみましょうか。以下、【VB6】を前提にしています。

    魔界の仮面弁士さん、重ねて回答ありがとうございます!!
    一度VB6でプロジェクトを作って、実際にどうなっているか確認したいと思います。

    ありがとうございました.....!!

引用返信 削除キー/
■33326 / inTopicNo.6)  Re[3]: プロパティウィンドウに表示されないプロパティとは
□投稿者/ ミント 一般人(4回)-(2016/04/07(Thu) 17:39:39)
  • アイコンNo33325に返信(ミントさんの記事)

    こちらの記事は、解決済みです(*^o^*)
解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -