- 締切済み
ユーザーコントロールの座標
コントロール名がHogeのユーザーコントロールを作成します。 Form1にHogeを貼り付けHoge1とする。 どのようなユーザーコントロールに対してもForm1.Hoge1.Leftのような書き方ができますが、 Dim UC As Hoge UC.Leftのような書き方ができません。 後者のような参照ができないプロパティは、自分で定義したのではない、元からあるLeftとTop、Indexなどです。 このようなプロパティは、コントロールの参照の変数から、アクセスできないのでしょうか? オブジェクトはこのプロパティおよびメソッドをサポートしていませんと言われます。 オブジェクト変数が宣言されていないわけではありません。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- todo36
- ベストアンサー率58% (728/1234)
やはり現象が確認できません。 Private Sub Form_Load() Hoge.DragMode = vbAutomatic End Sub Private Sub Picture1_DragDrop(Source As Control, x As Single, Y As Single) Dim Cast As Hoge MsgBox Source.Left Set Cast = Source MsgBox Cast.Left Cast.Left = Cast.Left + 100 End Sub ひとつだけ気になったのは >Form1にHogeを配置し、Hogeと名づける。 クラス名と名前が同じなのは気持ち悪いので名前はHoge1とかにするべきでしょう。
- todo36
- ベストアンサー率58% (728/1234)
こちらの環境(VB6SP5+W2K)では、ユーザーコントロールの.Leftプロパティは 問題なく使えるけど.. 環境と再現手順を補足して下さい
お礼
W2KSP2+VBSP5で同じ環境です。 コントロールHogeを作成し、適当なメンバを持たせる。 Form1にHogeを配置し、Hogeと名づける。 Form1.Hoge.Leftは参照可能。 Picture1を貼り付けて、実行時HogeをPiture1にドラッグしたところ Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single) Dim Cast As Hoge Set Cast = Source とするとCast.LeftもSource.Leftも参照不可能。 #1にも書いたとおりです。
補足
どうも日本語であることが原因かもしれません。 HogeをForm1に配置した場合、Form1.Hogeは "_日本語名コントロール型"、 Dim Cast As 日本語名コントロール型とした場合Castは "日本語名コントロール型" となり、配置されたほうはアンダースコアが最初についているのです。 As _日本語名コントロール型 と記述しようとしましたが、もちろん不可、As [_日本語名コントロール型] もありませんでした。 いまさら日本語の名前を撤回することはできないのですが、これの解決方法はないでしょうか? そもそもUMLからVBに来ることのほうが無望?
- uratan
- ベストアンサー率30% (38/124)
具体的に、どのようなことをされたいのか、教えていただけないでしょうか? なぜ、hoge型の変数を定義しなくてはいけないのですか? パッと見、派生させたいのかな?と思っちゃいました。 ・・・でも、VBで派生って概念ありましたっけ?
お礼
Form1にHoge(0)が配置してあって 動的にロードしたいくつかのHoge(?)があるのですが、それをあるコントロールにドラッグした時に Private Sub あるコントロール_DragDrop(Source As Control, X As Single, Y As Single) Dim Cast As Hoge Set Cast = Source としたときにCast.Leftが参照できなかったのです。 もちろんSource.Leftも。
お礼
追記 ○ じつはコントロール名が日本語である ○ UML企画書からプログラムを作っているので、クラス名とオブジェクト名が同じでないことがふさわしくない なのですが、これでも再現しませんか?
補足
クラス名とオブジェクト名を変えましたが、やはりメンバリストには表示されないし、コンパイルもできませんでした。