VB6のユーザーコントロールの受け渡しでプロパティ

このQ&Aのポイント
  • VB6のユーザーコントロールの受け渡しでプロパティにアクセスする方法を教えてください。
  • クラス内でVB6のユーザーコントロールのVisibleプロパティを制御する方法を教えてください。
  • VB6のボタンなどの標準コントロールではできるが、ユーザーコントロールではできない場合、どのように対処すればよいですか?
回答を見る
  • ベストアンサー

VB6のユーザーコントロールの受け渡しでプロパティ

自作のユーザーコントロールをフォームに貼り付け、 それをクラスに渡してクラス内でそのコントロールのVisibleを制御しようとしておりますが、 フォームからコントロールのVisibleプロパティにアクセスできますが、 クラスからだと、 メソッドまたはデータメンバが見つかりません とコンパイルエラーが出ます。 そこで、コントロールをControlやUserControlにキャストしてみましたが 型が一致しません というエラーとなってしまいます。 コントロールにVisibleプロパティの追加を試みましたが、 ActiveXコントロールインタフェースウィザードの使用できる名前に於いて それらのプロパティが列挙されません。 対象がユーザーコントロールでなく、ボタンなどの標準コントロールの場合は できたのですが・・・ なにか方法をご存知でしたらご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Visibleプロパティを管理しているのがコンテナ側だからですよ FormやPictureBoxはコンテナになりますのでフォームにはったUserControlの場合はVisibleプロパティが操作可能です クラスに渡した UserControlですとこのコンテナが提供するExtenderプロパティを直接操作することが出来ないのではと思います UserControlにVisibleを操作するプロパティを追加してみましょう private bVisible as Boolean Public Property Let MyVisible(value as Boolean)   bVisible = value   ' Extenderを通してVisibleを操作   Extender.Visible = value   PropertyChanged "MyVisible" End Property Public Property Get MyVisible() as Boolean   MyVisible = bVisible End Property Private Sub UserControl_InitProperties()   ' プロパティの初期化   bVisible = Extender.Visible End Sub Private Sub UserControl_ReadProperties(PropBag As PropertyBag)   bVisible = PropBag.ReadProperty("MyVisible", Extender.Visible) End Sub Private Sub UserControl_WriteProperties(PropBag As PropertyBag)   PropBag.WriteProperty "MyVisible", bVisible, Extender.Visible End Sub といった具合のコードを追加しておきます クラス側では obj.MyVisible = True または obj.MyVisible = False といった具合で操作してみましょう

msx68000
質問者

お礼

できました!!! Extenderプロパティが要点なんですね。 どういうものかいまいちわかっていませんが。 とにかく、これを使ってActiveXコントロールインタフェースウィザードなんか気にせず無理やり実装しちゃえばよさそうですね。 実をいいますとVisible以外にもWidthとかHeightとか必要で結構面倒です(涙)。 ありがとうございました。

関連するQ&A

  • [VB6.0]フォーム上に配置したコントロールのフォントサイズが変えられない

    はじめまして。 VB6.0のアプリケーションウィザードを使用してフォームをいくつか作りました。 ウィザード終了後、これらのフォーム上に配置されたラベルなどのfontプロパティ を操作してフォントサイズを変えたいのです。フォームのデザイン上はフォントサ イズを変えることが出来るのですが、実行すると、"コントロールのfontプロパティ のfontサイズ"ではなく、"フォームのfontプロパティのfontサイズ"で統一されて しまいます。つまり、コントロール毎の値は無視されて、フォームの値で統一され てしまうのです。 exe形式にコンパイルしても同じでした。どこかしらのプロパティをいじるのだと 思うのですが、どなたかわかる方はいらっしゃいますか? よろしくお願いします。 (環境)Windows98SE+VB6.0+SP5.0

  • カスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

    タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。 よろしくお願いします。

  • ActiveXコントロールの作成(VB6)

    こんばんは。 今、VB6でActiveXコントロールを作成しようと思っています。 現在、標準EXEにて、プログラムが作ってあります。 動作としては、 1.スタートボタン(CmdStart)で開始 2.処理(外部の測定器によるデータ収集) 3.終了ボタン(CmdEnd)にてプログラム終了 です。 これをもとに、ActiveXコントロールを作成したいです。手元にある文献にしたがってほぼコピー&ペーストで作成しました。また、これの動作を調べるため、標準EXEのフォームを作成し、そのフォームにActiveXコントロールを貼り付けました。 ここで質問です。 Form_LoadはUserControl_Initializeに書き換えました。(これは文献に載っていました) 最後のプログラム終了がうまくいきません。 標準EXEでは Private Sub CmdEnd_Click() Unload Me End Sub と書いてプログラムを終了させていました。 ここを書き換えずにActiveXコントロールを実行させたらエラーが出ました。"Unload Me"を"End"に書き換えてみたら、サポートされていないと出ました。 CmdEndをクリックしてプログラムを終了させるにはどう書けばいいでしょうか? よろしくお願いします。

  • C# ユーザコントロール内のボタン押下を親で知る

    こんにちは。ユーザーコントロール内のボタンをクリックした時、そのユーザーコントロールをおいている親フォーム側で、それを知るにはどのようにすればよいでしょうか? ---------------------------------------------------------------------- [Form1.cs] void Inform_UserControlButton1Click() { //親が持っている変数を使って処理を行いたい } void Form1_Load(....) { //ユーザコントロールを設置 UserControl1 ctrl = new UserControl1(); this.Controls.Add(ctrl);   //ユーザコントロール内のbutton1を見つける List<Control> ctrl = new List<Control>(cps.Controls.Find("button1", false)); //Form1が持っている変数を使う為の関数を通るようにしたい (Button)ctrl[0].Click += new System.EventHandler(Inform_UserControlButton1Click); //←エラー } ---------------------------------------------------------------------- [UserControl.cs] button1が配置されています。 ---------------------------------------------------------------------- こんな感じにしてできないかなー?と思っていたのですが、//←エラーのところで、 イベント 'System.Windows.Forms.Control.Click' は += または -= の左側にのみ表示されます。 となってしまい上手くいきません。 どのようにすればよいでしょうか?

  • ユーザーコントロールのDrawToBitmap

    vb.net(VisualStudio2015)で作成したユーザーコントロール内の画面を「DrawToBitmap」で取得しフォーム内に表示したいのですが上手く表示できません。もしご存知の方がいましたらご教授して頂けますと助かります。宜しくお願い致します。 Private SecondScreen as New UserControl1 'ユーザーコントロール内の画面を取得 Dim mBitmap as New Bitmap(SecondScreen.Width,SecondScreen.Height) SecondScreen.DrawToBitmap(mBitmap,New Rectangle(0,0,SecondScreen.Width,SecondScreen.Height)) . . . '取得した画面をフォームに表示 Dim g as Graphics = e.Graphics g.DrawImage(mBitmap,new Rectangle(0,0,SecondScreen.Width,SecondScreen.Height)) いくつか省略箇所がありますが、上記の方法ですとユーザーコントロール内の画面が取得できなく、「SecondScreen.Visible=True」で一度表示させてから取得すると表示されます。 フォーム内にユーザーコントロールを張り付けて表示させるのではなく、一度「DrawToBitmap」で取得させてから表示させたいのです。 お手数ですが、ご教授お待ちしています。 宜しくお願い致します。

  • ActiveXコントロールでフォームを参照するには?

    VB6SP5を使用してActiveXコントロールを勉強中です。 ActiveXコントロールを作成(OCX化)して、そのコントロールを別のプロジェクトのフォームで使用しようと思っています。 このコントロールの機能は、使用するフォーム上の「ラベル」や「テキストBOX」の情報(Caption、サイズ、位置、色 etc...)を取得して、いろいろと処理を行いたいのですが、取得方法がわかりません。 一応、次のようにコントロールのメソッドの引数でフォームを受け取ろうとしたのですが、下記のコンパイルエラーが出てダメでした。  Public Sub ABC( ByRef frmMain As Form )    :  End Sub --- コンパイルエラー!! -------------------------------------------  "プライベート オブジェクトモジュールを、  パブリック オブジェクトモジュール内で、  パブリック プロシージャの引数または戻り値、  パブリック データメンバ、またはパブリックのユーザー定義型のフィールドとして、  使用することはできません。" ------------------------------------------------------------------ ところが、"As Form" を "As Object" にすると、上手くいきました。  Public Sub ABC( ByRef frmMain As Object )    :  End Sub この違いは何なんでしょうか? この使い方は正しいのでしょうか? もし、別の方法があれば、教えて下さい。

  • VB6 ユーザーコントロールのフォーカス無効

    現在VB6 SP5にて、テンキーのようなユーザーコントロールを作成しています。 コマンドボタンを配置し、押された場合にキーボードの入力をエミュレートするような作りにしています。 問題は、作成したコントロールをフォームに貼り付けて使用する場合に、マウスでクリックしたキーに応じて、現在フォーカスのあるテキストボックスなどに入力したいのですが、ユーザーコントロールのコマンドボタンにフォーカスが移ってしまい、うまくいきません。 ユーザーコントロールのCanGetFocusプロパティをFalseに設定しようとすると、「フォーカスを取得できないコントロール上に配置された子コントロールは、フォーカスを取得することができません。」とエラーが表示されてFalseにできません。 フォーカスを無効にし、このような機能を実現するには何か良い方法ありますでしょうか?

  • ユーザーコントロールの座標

    コントロール名がHogeのユーザーコントロールを作成します。 Form1にHogeを貼り付けHoge1とする。 どのようなユーザーコントロールに対してもForm1.Hoge1.Leftのような書き方ができますが、 Dim UC As Hoge UC.Leftのような書き方ができません。 後者のような参照ができないプロパティは、自分で定義したのではない、元からあるLeftとTop、Indexなどです。 このようなプロパティは、コントロールの参照の変数から、アクセスできないのでしょうか? オブジェクトはこのプロパティおよびメソッドをサポートしていませんと言われます。 オブジェクト変数が宣言されていないわけではありません。

  • ActiveX コントロールの使用個数の確認

    教えて下さい。 各コントロール配列がフォーム上ですと、[コントロール名.UBound]メソッドで最大要素数が確認できますよね。 (もしくは、Indexプロパティで要素Noを見れる。) それと同じ事をAcitiveXコントロール内で自コントロールが有るフォームで何個使用されているか知りたいのですが、何か方法はありませんか? 例を上げます。  ActiveXコントロール名称:Test フォーム名称:frmMain このフォームにTest(0),Test(1),Test(2)を3個使用した場合、   (もしくは、Test1,Test2,Test3と3個使用した場合) ActiveXコントロール内で何個使用されているかを知りたい。 と言うわけですが。。。

  • ActiveXコントロールにオブジェクトの追加?

    VB6SP6です。 ActiveXコントロールにはプロパティ・メソッド・イベントが設定できることがわかりました。 オブジェクトの追加ってできますか? 使用する側から 通常は「ActiveX名.メソッド」とするところを 「ActiveX名.オブジェクト名.メソッド」というようにメソッドを呼び出したいのです。 へんちくりんな質問でしたらすみません。 どなたかわかる方いらっしゃいましたらよろしくお願いいたします!

専門家に質問してみよう