[VB.NET] インスタンス生成とインテリセンス

このQ&Aのポイント
  • VB.NETの勉強をしつつ業務開発をしております。現在、作成したクラスをインスタンス化した際、インテリセンスが表示されず、困っております。
  • メソッド内で生成したインスタンスからは、インテリセンスが表示されるのですが、クラス直下で生成したインスタンスでは、インテリセンスが表示されないのです。
  • インテリセンスは表示されなくても、エラーにはなりません。自分で打ち込めば動作するのですが、共有利用したいので、インテリセンスの説明は表示させたいのです。
回答を見る
  • ベストアンサー

[VB.NET] インスタンス生成とインテリセンス

VB.NETの勉強をしつつ業務開発をしております。 現在、作成したクラスをインスタンス化した際、インテリセンスが表示されず、困っております。 メソッド内で生成したインスタンスからは、インテリセンスが表示されるのですが、クラス直下で生成したインスタンスでは、インテリセンスが表示されないのです。 Namespace MyName   Public Class Class1     Public Sub test1()       Debug.Print("test1呼び出し")     End Sub   End Class End Namespace Public Class Form1   Dim MyCls = New MyName.Class1 ←○MyNameのインテリセンスでClass1が表示   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     MyCls.test1() ←×MyNameのインテリセンスでtest1が表示されない     Dim MyCls2 = New MyName.Class1     MyCls2.test() ←○MyNameのインテリセンスでtest1が表示   End Sub End Class インテリセンスは表示されなくても、エラーにはなりません。自分で打ち込めば動作するのですが、共有利用したいので、インテリセンスの説明は表示させたいのです。 インテリセンスとは?というレベルから勉強している超初心者のため、拙い言葉遣いご容赦ください。お知恵をお借りしたく、宜しくお願いします。

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

  • ベストアンサー
回答No.1

VBのバージョンが書かれていないようですが、試された状況から推測すると VB2010 かと思うのですが、VB.NET のように書かれると VB.NET 2002 VB.NET 2003 を指す 事になり変に誤解を招きます。 VB2005 以降は、製品名に“.NET”の名を冠さないようになっています。 因みに、現在[.NET対応のバージョン]は下記のようなものがあります。 VB10: Visual Basic 2010 / Visual Studio 2010 VB9 : Visual Basic 2008 / Visual Studio 2008 VB8 : Visual Basic 2005 / Visual Studio 2005 VB7.1:Visual Basic .NET 2003 / Visual Studio .NET 2003 VB7 : Visual Basic .NET(2002)/ Visual Studio .NET(2002) 本題ですが、結論から言いますと変数の型を宣言されていないからインテリセンス機能が働かない。 Option Strict Off の状態で使用されているのでしょうか? それなら On で使用されるようお勧めします。(勉強のためにもなるし) 原因は、Dim MyCls = New MyName.Class1 ←○MyNameのインテリセンスでClass1が表示 では、MyCls の変数の型が宣言されていません。 Private MyCls As New MyName.Class1 のように宣言し直して見て下さい。 >Dim MyCls2 = New MyName.Class1 こちらはローカルで宣言されていますので、VB2008 からだったかVB2010からだったかチョット 確認しておりませんが、型が書いていないと自動で型を認識するようです。 因みに下記を試して見て下さい。 Option Strict On の状態で ローカルで Dim i = 0 'と宣言して見て下さい。 又、Private で Private i = 0 'と宣言して見て下さい。 又、ループ用変数等は宣言しなくても使用できるようになったりしていますが、基本は踏まえて おいて下さい。

haribote
質問者

お礼

すみません。VBのバージョンは、Visual Basic 2008 ExpressEditionです。 VB.NETって書かないんですね。詳しく教えてくださり有難うございます!すごく勉強になりました。 ご指示のとおり、Option Strict Onでやってみました。確かにエラーになりました。 インテリセンスは出なかったものの、実装は出来ていたので、型宣言だったとは気づきませんでした。 Private MyCls As New MyName.Class1 としてみましたら、インテリセンスが出てくるようになりました。 お恥ずかしながら、Option Strict Onとしたら、他の箇所でも多数の型宣言エラーが出たので、 これを機に、プログラムを全体的に見直しいたします。 とても丁寧に教えていただき、本当に有難うございました。初心者の私でも、とても良く理解できました。感謝です! 本当に有難うございました。

関連するQ&A

  • VB.NETのデリゲートについて

    VB.NETのデリゲートについて質問です。 以下のプログラムなのですが、 デリゲート型をインスタンス化しているところで、コンストラクタにパラメータを渡していますが、 そのコンストラクタはどこに定義されているのでしょうか。 (AddressOf t1.Ohayou)というパラメータが渡されていますが、このパラメータを受け取っているコンストラクタがどれなのかが分かりません。 ご教示よろしくお願いいたします。 Delegate Sub Myprint(ByVal s As String) Module Module1 Sub Main() Dim t1 As Test1 = New Test1() Dim t2 As TEst2 = New Test2() Dim d As Myprint = New Myprint(AddressOf t1.Ohayou) d.Invoke("VB太郎") d = New Myprint(AddressOf t2.Konbanwa) d.Invoke("VB太郎") End Sub End Module Class Test1 Sub Ohayou(ByVal s As String) Console.WriteLine("おはようございます。{0}です。", s) End Sub End Class Class Test2 Sub Konbanwa(ByVal s As String) Console.WriteLine("こんばんわ。{0}です。", s) End Sub End Class

  • VB.net(.net framework 3.5 sp1)でフォーム

    VB.net(.net framework 3.5 sp1)でフォーム上に設置したコントロールのプロパティを一括で設定する方法はないでしょうか? 下記は実行しても反映されないのですが、処理のイメージとしてはこんな形です。 Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim test As New Button test.Text = "TEST" test.Top = 0 Me.Button1 = test End Sub End Class

  • オブジェクトとインスタンスはそれぞれあってますか?

    オブジェクトとインスタンスはそれぞれあってますか? vbaで Sub test() Dim CN As ADODB.Connection 【1】 Set CN = New ADODB.Connection  【2】 ・・・ それぞれ 【1】オブジェクトの作成 【2】インスタンスの作成 であってますか?逆ですか? 動作の名称を教えてください。

  • Visual Basic 2005 クラスライブラリの使い方

    異なるクラス間で共通の変数aを使いたいのですが、うまくいきません。あるクラスForm1でaを宣言しても他のクラスClass1でも宣言しないとエラーが出てしまいます。 以下のクラスをデバイスアプリケーションとして作成し、 Public Class Form1 Public a As Integer = 100  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Test As New MyLibrary.Class1 Test.Plus1() MsgBox(a, MsgBoxStyle.Information, "実験") End Sub End Class 以下のクラスをクラスライブラリMyLibraryとして作成します。 Public Class Class1 Dim a As Integer = 0 Public Sub Plus1() a += 1 End Sub End Class Form1でボタンを押すと、メッセージボックスに100と表示されます。 (関数Plus1の効果なし) ちなみにClass1の「Dim a」を「Static a」にしてクラスライブラリ(DLL)を最初に呼び出したときだけ初期化すればよいと思ったのですが、そうすると「'Static' は、メンバ変数宣言では有効ではありません。」というエラーが出てしまいます。 解決方法をご存知の方、ご教授願います。 また、クラスライブラリ(DLL)を作成するとまとまりができてプログラムの変更がしやすいと思いますが、やはり処理速度が遅くなるなどの問題もあるのでしょうか?

  • VB2010でMDI親フォームから子フォームを表示

    VB2010でソフトを作っております。 MDI親フォームから子フォームを表示させたいのですが…。 過去に少しだけVB6を使っていたことがありますが、クラスという概念に苦労しております インスタンスや初期化といったところをうまく扱えばとは思うのですが、よろしくご指導お願いいたします。 1.MDI親フォーム(Form1)のボタンを押し、子フォーム(Form2)を表示させる 2.子フォームが表示されていなかったら表示させる 3.子フォームが表示されていたら何もしない これだけの事ですがずいぶん悩んでおります。 全コードがこれです。 Public Class Form1 Private f2 As New Form2 Private Sub Form1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.IsMdiContainer = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim fChild As Form() = Me.MdiChildren For Each f As Form In fChild If f.Text = "Form2" Then Exit Sub End If Next f2 = New Form2 f2.MdiParent = Me f2.Show() f2.Activate() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If f2 Is Nothing OrElse f2.IsDisposed Then f2 = New Form2 f2.MdiParent = Me End If f2.Show() f2.Activate() End Sub End Class ボタン1でもボタン2でも、期待する動作はするのですが、 ボタン1ではアクティブになっているフォームの名前を力技で取得している気がして… ボタン2では子フォーム(Form2)をすでに表示している状態でもさらにShowをしているのが気に入らなくて… もっとスマートな方法がありましたら、ご指導お願いします。

  • 《instantiate》(インスタンス化)と《create》(生成)

    《instantiate》(インスタンス化)と《create》(生成)が分かりません。 《instantiate》(インスタンス化)は、必要とする側の分類子の操作が、必要とされる側の分類子のインスタンスを生成することを示す。と書かれています。 《create》(生成)は、必要とする側の分類子が、必要とされる側の分類子のインスタンスを生成することを示す。と書かれています。よく分かりません。 JAVAでコーディングするとどのような感じになるのでしょうか? instantiateで検索していたら以下のようなコーディングが見つかりました。 public static class Commands { static Commands() { CloseCardCommand = new Command("CloseCard"); AddCardCommand = new Command("AddCard"); } public static Command CloseCardCommand { get; private set; } public static Command AddCardCommand { get; private set; } } このコーディングで、どのような処理をしているかも分かりません。 必要とする側の分類子の操作とは、Commandsでしょうか? 必要とされる側の分類子とは、CloseCardCommandとAddCardCommandでしょうか? 《create》(生成)の場合、どのようなコーディングになるのでしょうか? コンストラクタで CloseCardCommand = new Command("CloseCard"); AddCardCommand = new Command("AddCard"); と書くのではなく、クラス内(コンストラクタやメソッドの外)に書くのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • Formに貼り付けたActiveXコントロールへの

    Formに貼り付けたActiveXコントロールへのアクセスを別Classに担当させる方法 プログラミング初心者です。 現在VB.NETでRS-232Cで接続するデバイスを制御するフォームアプリケーションを作成しています。 デバイス制御にはメーカからActiveXコントロールが配布されており、それをフォームに貼り付けて基本的な動作をさせるところまではできています。 ただ、現在全てのコードがForm1クラスに記述されており、今後ボリュームが増えていくとメンテがしづらくなりそうですので、まとまった各機能群を別のクラスとして作成したいのですが、フォームに貼り付けたActiveXコントロールを別のクラスから動かすためにはどうすれば良いのかわかりませんので教えていただけないでしょうか。 以外検討してだめだったものです。 Class Class2 Dim frm As Form1 = New Form1 frm.AxSample1 End Class 上記のようにForm1のインスタンスを作成するのも何かが違う気がしますし…。 Class Class2 Dim frm As Form Public Sub New(ByVal senderfrm As Form) frm = senderfrm End Sub frm.AxSample1 End Class 上記だとAxSample1がClass2に認識されるはずもないですし…。 Importsとか色々試してみたのですがうまく行かず…という状況です。 そもそも根本的に別クラスにさせようということがおかしい、などの回答でも結構です。 よろしくお願いいたします。

  • VB2008で構造体を引数とした時にエラー

    VB2008の勉強を始めて数週間の初心者です。 勉強用にいろいろとプログラムを作っているのですが、 構造体(Structure)を引数で渡して戻り値を取得する Functionを作成してみました。 同一クラス内のPrivate Function の場合は問題ないのですいが、 追加した別クラスに Function を作成したところ 「 型 'TEST_A.Form1.str_IN' の値を 'TEST_A.Class1.str_IN' に変換できません。」 のエラーが表示されてしまいます。 別クラスのFunctionを使用する時、引数には構造体は指定できないのでしょうか? なにか文法上の誤りがあるのでしょうか? 初心者なので変な質問してたらスイマセン。 詳しい方がいらっしゃいましたらよろしくお願いします。 ------------------------------------------------------ Public Class Form1  Public Structure str_IN   Public in_aaa As String  End Structure  Private Sub Button1_Click(ByVal sender As System.Object,  ByVal e As System.EventArgs) ~   Dim stin As New str_IN   '------------------------------------   stin.in_aaa = "aaa"   Label1.Text = Test_Sub(stin) '<------- これはok   '-------------------------------------   Dim cls = New Class1   stin.in_aaa = "aaa"   Label1.Text = cls.CFnk(stin) '<----- エラーになる  End Sub  Private Function Test_Sub(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class ------------------------------------------------------------ Public Class Class1 '新たに作成したクラス  Public Structure str_IN   Public in_aaa As String  End Structure  Public Function CFnk(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class

  • クラスのインスタンス

    お世話になります クラスのインスタンスを生成する際に class CTest { int m_i; } CTest* pTest = new CTest; void main() { pTest->m_i = 0; } CTest::~CTest() { delete pTest; } と、関数外でインスタンス化する際にも、newを使用するのでしょうか? もう1つ、newを使用しないで CTest Test; CTest* pTest = &Test; とするのと、何が違うのでしょうか? 多分、根本的な所が理解できていないと思われますが、よろしくお願い致します

  • VB.net2008 設定画面の作成

    VB.net2008 設定画面の作成 こんにちは、プログラミングの勉強を行っているのですが。 少し、躓いてしまったのでこちらで質問させてください。 Form1 と Form2 という二つのフォームを用意して。Form1で使用している設定値クラスをForm2にコピーして設定変更を行った後リターンで返すということを考えています。 ですが、どうしてもうまく書けないため、ご助言ください。 -----------------------以下ソース----------------- Public Class Form1 'XMLに設定保存 Private Sub SaveSetthing()  Dim wset as New Setting 'XMLserializerで書き込み ~~~~~~~~~~~~~~~~~~~ End sub   '設定読み込み Private Sub LordSetthing() 'XMLserializerで読み込み  Dim lset as New Setthing ~~~~~~~~~~~~~~~~~~~ End sub EndClass Public Class Setthing Public UserName as String Public Age as Integer ~~~~~~~~~~~~~~~ Public Function Clone() as Setthing Return DirectCast(MyBase.MemberwiseClone,Setthing) End Function End Class ---------------------------------------------- このときに、Form1のボタンを押したらForm2を開く動作で ------------------------------------------------- Private sub ボタンクリック(Bybal*************)  Dim f as Form2 = New Form2(Setthing.Clone) if f.ShowDialog = Windows.Forms.DialogResult.OK then me.Setthing = f.GetValue End if End sub ------------------------------------------------- ↑ここで返り値を受けたいと考えています。 ↓Form2構文 -------------------------------------------------- Public Class form2 Public sub New(ByVal Value as Setthing) InitializeComponent() Dim TempSetthing as Setthing = Value End sub  'ここで、渡された設定値の表示と設定画面で変更された設定の読み込み   Public Function GetValue() As Setthing Return TempSetthing End function End Class -------------------------------------------------- と、大雑把に書き込みましたがこのような感じの処理を行いたいです。 ですが、私の理解が足りない為Form2内でTempSetthing内のデータの読み書きが行えません(宣言できません) 独学で作ったものですので、ここまでの流れがおかしなものになっている可能性もありますが。 「このような処理が行いたい!」というのは伝えれるかとは思います。 Form2内でTempSetthingの値を変更できるようなTextBox等を作成して。代入する形にしたいのですが。 ご教授お願いします・・・

専門家に質問してみよう