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

自作のユーザーコントロールをフォームに貼り付け、
それをクラスに渡してクラス内でそのコントロールのVisibleを制御しようとしておりますが、

フォームからコントロールのVisibleプロパティにアクセスできますが、
クラスからだと、
メソッドまたはデータメンバが見つかりません
とコンパイルエラーが出ます。

そこで、コントロールをControlやUserControlにキャストしてみましたが
型が一致しません
というエラーとなってしまいます。

コントロールにVisibleプロパティの追加を試みましたが、
ActiveXコントロールインタフェースウィザードの使用できる名前に於いて
それらのプロパティが列挙されません。

対象がユーザーコントロールでなく、ボタンなどの標準コントロールの場合は
できたのですが・・・

なにか方法をご存知でしたらご教授ください。

A 回答 (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
といった具合で操作してみましょう
    • good
    • 0
この回答へのお礼

できました!!!

Extenderプロパティが要点なんですね。
どういうものかいまいちわかっていませんが。

とにかく、これを使ってActiveXコントロールインタフェースウィザードなんか気にせず無理やり実装しちゃえばよさそうですね。

実をいいますとVisible以外にもWidthとかHeightとか必要で結構面倒です(涙)。


ありがとうございました。

お礼日時:2010/12/21 17:47

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

このQ&Aを見た人はこんなQ&Aも見ています