• 締切済み

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

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

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

やはり現象が確認できません。 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とかにするべきでしょう。

haporun
質問者

お礼

追記 ○ じつはコントロール名が日本語である ○ UML企画書からプログラムを作っているので、クラス名とオブジェクト名が同じでないことがふさわしくない なのですが、これでも再現しませんか?

haporun
質問者

補足

クラス名とオブジェクト名を変えましたが、やはりメンバリストには表示されないし、コンパイルもできませんでした。

全文を見る
すると、全ての回答が全文表示されます。
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

こちらの環境(VB6SP5+W2K)では、ユーザーコントロールの.Leftプロパティは 問題なく使えるけど.. 環境と再現手順を補足して下さい

haporun
質問者

お礼

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にも書いたとおりです。

haporun
質問者

補足

どうも日本語であることが原因かもしれません。 HogeをForm1に配置した場合、Form1.Hogeは "_日本語名コントロール型"、 Dim Cast As 日本語名コントロール型とした場合Castは "日本語名コントロール型" となり、配置されたほうはアンダースコアが最初についているのです。 As _日本語名コントロール型 と記述しようとしましたが、もちろん不可、As [_日本語名コントロール型] もありませんでした。 いまさら日本語の名前を撤回することはできないのですが、これの解決方法はないでしょうか? そもそもUMLからVBに来ることのほうが無望?

全文を見る
すると、全ての回答が全文表示されます。
  • uratan
  • ベストアンサー率30% (38/124)
回答No.1

具体的に、どのようなことをされたいのか、教えていただけないでしょうか? なぜ、hoge型の変数を定義しなくてはいけないのですか? パッと見、派生させたいのかな?と思っちゃいました。 ・・・でも、VBで派生って概念ありましたっけ?

haporun
質問者

お礼

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も。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ユーザーコントロールの参照について

    ユーザーコントロールを作成し、デザイナ上でユーザコントロールを追加した場合には、コード上でLeftプロパティなどの自身で作成したプロパティ・関数以外でも参照ができるのですが、 コード上で動的にコントロールを追加した場合、自身作成したプロパティ・関数のみしか参照ができません。 ユーザコントロールの作成時に「公開する」的なプロパティ等の設定が必要なのでしょうか? 環境は、VB6/WindowsXP です。 ご存知の方がいらっしゃいましたら、ご教授ください。

  • コントロール名とそのプロパティー名を取得したい

    Form の Top/Left の位置を INI ファイルから取得しようと思います。 INIファイルの構造は   [コントロール名]   プロパティー=Value つまり   [Form]   Top=300 という感じです。 WritePrivateProfileString に "Form","Top" というパラメータを送りたいのですが、 この場合のオブジェクト名である"Form"、プロパティ名である"TOP"はどこで取得できるのでしょうか?

  • ユーザーコントロール(OCX)のオブジェクト名

    2点わからない点がありますのでよろしくお願いします。 (1)ユーザーコントロールのオブジェクト名を引数として使用したいのですが エラーが発生し困っています。どのようにしたらいいのでしょうか? ユーザ-コントロールのオブジェクト名:UserControl1 ☆でエラーが発生する「オブジェクトはこのプロパティまたはメソッドをサポートしていません。」 ※関数aはDLLとなっておりどうしてもオブジェクト型で渡さなければなりません。 Private Sub Command1_Click() Call a(Me) End Sub ===DLL関数:a=== オブジェクト名とボタン名をINIファイルに書き込む処理 =========== Private Sub a(prmObj As Object) Dim strMsg As String strMsg = prmObj.Name ・・・☆ : : : End Sub (2)String型からObject型に変換するのは可能でしょうか? INIファイルから"UserControl1.Command.Enable = False"というString型のデータを読込み、 ボタンを有効・無効設定するという事が処理がしたいのですが何かいい方法がありましたら教えてください。 Private Sub UserControl_Initialize() Dim a As Object Dim b as String 'INIファイルから取得 Dim c as String       'INIファイルから取得 b = "UserControl1.Command1" c = "False"   Set a = Me.Controls(b) If c = "False" then a.Enable = False else a.Enable = True End If End Sub

  • ユーザーコントロール内にNotifyIconを設置したい

    とりあえずVB2005で作っています。(あとでC#あたりに切り替えも考えていますが) NotifyIcon、ContextMenuStrip、ToolStripMenuItemあたりを利用して システムトレイ周りを操作できるということは分かりました。 それを利用したい場合のフォームが複数存在した場合、毎度それを 貼り付けて作ってあげなきゃいけなそうで面倒という理由より、 既にそれをサポートしたFormをベースとするユーザーコントロールを 作ろうと思い立ちました。 そこでまず、NotifyIconをサポートさせようと考え、実際にはこんな感じです。 Property SystemTrayUsable() As Boolean - システムトレイの利用をするかどうか ReadOnly Property Notify() As NotifyIcon - NotifyIconのプロパティ デザイン上でシステムトレイを利用すると設定された場合に限り、Notify()より NotifyIconオブジェクトを取得できて、NotifyIconの各種プロパティを 設定できる、ということを想定しています。 が、これを実現させようとすると、デザイン上では設定できるものの Form1.Designer.vbの方ではNotifyIconのプロパティ設定に対するコードが 記載されない為、ビルドを行うと初期化されてしまいます。 (つまり、デザイン上で設定が出来るだけで、ビルドを行うとデザイン上で 設定した内容すら残らない) 多分、ビルドした瞬間にNotifyIconのインスタンスが消える関係で そうなってしまうんだと思うんですが。 Form1.Designer.vbに直接 Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) Me.Notify.Icon = CType(resources.GetObject("NotifyIcon1.Icon"), System.Drawing.Icon) Me.Notify.Text = "NotifyIcon1" Me.Notify.Visible = True といったコードを打ち込むと動作するので、何か方法があると思うのですが解決できません。 NotifyIconで指定できるプロパティを逐一全部自作して、内部的にNotifyIconのプロパティを操作してあげる、というのも手なのでしょうが、 NotifyIconの全てのプロパティ、メソッドを自作するというのはとても現実的では ないので、八方塞がりになってしまいました。 どうするとデザイン上で設定したNotifyIconのプロパティが保持されるのでしょうか?

  • コントロールが配列かどうかを知るには?

    Visual Basic6.0(SP5)で伺いたいことがあります。 フォーム上の全てのオブジェクトを For Each文で取得しています。以下の様にです。 Dim Control As Object For Each Control In Form1.Controls If TypeOf Control Is Text Then End If Next Control このとき個々のControlがコントロール配列かどうかを知りたいのですが、どうすればよろしいでしょうか?フォーム上にはコントロール配列のオブジェクトも、コントロール配列ではないオブジェクトもあります。 Control.Indexの値を参照しようとしても、コントロール配列でない場合は 「配列ではないオブジェクトです」とエラーになります。 IsArray関数でもFalseになってしまいます。 何を行いたいかというと、そのControlがコントロール配列(Text1(0)とかText1(1)とか)かどうかを調べて、そのIndexをある関数の引数にしたいのです。全てコントロール配列だったら、Control.Indexで値を取得できるのですが。 よろしくお願いします。

  • 指定名のオブジェクトを探す方法

    こんにちは、honiyonです。  あるHTML中に、 <FORM name="hoge1" ...> ~ </FORM> <FORM name="hoge2" ...> ~ </FORM> ...  と同じ名前で連番の振られたフォームが複数あります。  この数が固定ならいいのですが、場合によって増減します。  この各フォームの要素を操作するため、 object = document.findobject("hoge1");  みたいな、指定名のオブジェクトを取得する方法が必要になっています。  このような関数がありましたら、是非教えてください(..  また、連番を振るという方法も、増減する各フォームを処理する為に考えた1つの方法です。他に良い方法があれば教えてください(..  現在までとほほさんのサイトを参照して勉強してきましたが、もっと様々なプロパティやメソッドが載っているサイトがないかと模索中です。  良いサイトがありましたら、併せてお教え願えれば幸いです。  宜しくお願いします。

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

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

  • 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' は += または -= の左側にのみ表示されます。 となってしまい上手くいきません。 どのようにすればよいでしょうか?

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

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

  • ActiveX EXEのオブジェクトに渡したオブジェクトが微妙

    またまた微妙な質問ですみません。 ------- ActiveX EXEプロジェクト Class Hoge Public Sub Moge(lst) Dim Cast As ListBox MsgBox TypeName(lst) 'ListBoxと表示される Set Cast = lst 'ここがエラー Cast.List(2) = "hogehoge" 'キャストはできないがVariant型のままのアクセスは可能 End Sub ------- 標準EXE Class Form1 (List1を配置) Dim X As New Hoge Private Sub Form_Load() X.Moge List1 End Sub ----- このように、アウトプロセスのオブジェクトにフォームのコントロールを渡しました。 引数の型をAs ListBoxにしたかったのですが、それだとまずそこで型が一致しないといわれます。 しようがないのでVariantで引数を宣言し、渡した後にキャストしようと思ったのですが、そこでも型が一致しないといわれます。 TypeName関数は "ListBox" を返すし、Variant型のままメンバにアクセスすることはできるのですが、ListBox型の変数に代入することだけできないのです。 別プロセスのオブジェクトには、オブジェクトの参照は渡せないのでしょうか?