ウォッチ式の使い方について

このQ&Aのポイント
  • ウォッチ式を使用して、特定の変数の値を確認する方法について説明します。
  • VB2005Expressでのプロジェクトの構成やウォッチ式の使用方法について詳しく説明します。
  • ウォッチ式でオブジェクトのメンバの値を確認する方法について解説します。
回答を見る
  • ベストアンサー

ウォッチ式について

 お世話になります。VB2005Expressです。  あるプロジェクトが、a.vb及びb.vbから構成されています。  a.vbの中身は、 Option Explicit On Option Strict Off Public Class a Public c As String End Class となっています。  これを、b.vb上で、 Module b Public Sub test() Dim t As String t = a.c End Sub End Module としているのですが、これはこれで期待通りの動作をしています。(cが"123"なら、tも"123"になる)  さて、デバッグのステップイン等を使う際に、test()中のコードを追いかけている時で、tの値を知りたい場合はウォッチ式に"t"を与えれば良いのですが、cの値を知りたい場合はウォッチ式に何を与えれば良いのでしょうか。  "c"だと、「名前cは宣言されていない」というエラーが出ます。  "a.c"だと、「非共有メンバを参照するには、オブジェクト参照が必要です」というエラーが出ます。

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

  • ベストアンサー
  • NYOI
  • ベストアンサー率58% (56/96)
回答No.1

t = a.c ↑このようにインスタンスを生成させずにa.cを利用するのであるなら、cをSharedにすればよいかと思います。 ↓のように Public Shared c As String そうすれば共有メンバとなるので、ウォッチ式でa.cとしても 非共有メンバを参照するには~ のエラーは出なくなると思います。 試してないので、参考までに。

h-js01
質問者

お礼

 上手くいきました。ご教示、ありがとうございました。  VBは奥が深い。  いや、僕が浅いだけなのか・・・。

関連する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

  • VB6.0 →VB2005 のアップグレードでエラー表示

    VB6.0の標準モジュールでは Private Type typset a As String b As String c As Integer End Type Public make() As typset と記述してエラーもなく正常なのですが、VB2005にアップグレードしたときに、 Option Strict Off Option Explicit On Module Module1 Private Structure typset Dim a As String Dim b As String Dim c As Integer End Structure Public make() As typset←▼エラー▼            End Module 【エラー内容】 'make' は、module 'Module1' をとおして型 'typset' を namespace 'WindowsApplication1' で公開することはできません。 structure部をPublicなどにしてもエラーは消えますが、参照先に影響が出てしまいます。 根本的な解決方法が分かりません。 教えていただけないでしょうか?

  • 戻り値がクラスオブジェクト

    VB初心者でわからないので教えてください。 ある関数を呼び出して戻り値を取得するのですが、その戻り値がクラスオブジェクトとなっています。いろいろ調べてみましたが、いい結果にヒットしなかったので今回質問してみました。 言語はVB6.0です Function 関数A(A as String, B as String) dim C as Class1 set C = new Class1 Class1で宣言された変数に値を入れる処理     関数A = C end Function イメージはこんな感じです。 すみませんが解決策を教えてください。。。。

  • 他のExcelブックのモジュールに構造体を渡すには

    Book1.xlsのaモジュールから構造体を引数としてBook2.xlsのbモジュールを呼び出したいのですが、Book1.xlsのVBEのツールメニューの参照設定でBook2.xlsを参照しましたが、Book1.xlsのaモジュールを実行するとCall b(t)のtの箇所で「ByRef 引数の型が一致しません」というコンパイルエラーになります。 他のブックのモジュールに構造体を渡すにはどのようにすればよいのでしょうか。 よろしくお願いしたます。(OS:WindowsXP Excel2003) ---Book1.xls--- Option Explicit Public Type TT  name As String End Type Sub a()  Dim t As TT  t.name = "ABC"  Call b(t) End Sub ---Book2.xls--- Option Explicit Public Type TT  name As String End Type Sub b(t As TT)  MsgBox t.name End Sub ---------------

  • VB.NETで値や参照について ByRefなど

    VB.NETで値や参照について、まだ初学ですがよろしくお願いします。 VBは2008です。 以下のようなs文字列を参照引数にしたSetDataメソッドがあります。 ByRef s As Stringという引数は、SetData内でsを書き換えると、 呼び出したSetDataメソッド外でも中身が変わるので 私のByRefの認識ではポインタと解釈しています。間違っているでしょうか? SetData(1,1, buf)とすれば、DataGridViewの中は、「初期値」という文字が表示されます。 別のメソッド(KaKikae)でbufを"あ"という文字に変えた場合、SetDataメソッドを使わなくても 書き換わっていると思っていたのですが、実際実行してみると書き換わりません。 値や参照について理解が足りないからだと思いますがわかりません。 どのようにすれば、それが実現できるのでしょうか? Public Class HogeClass Private buf As String = "初期値" Private Sub SetData(ByVal x As Integer, ByVal y As Integer, ByRef s As String) As Boolean Dim dg As DataGridView dg = DataGridView1 dg.Item(x, y).value = s End Sub Private Sub KaKikae() buf = "あ" End Sub End Class

  • 別スレッド上の変数を参照する方法について

    VB2010で、別スレッドの変数をメインフォームが閉じられた時に 表示するプログラムを書いたのですが、変数の中身が空になってしまいます。 色々試してみたのですが、うまく値を参照できません。 別スレッド上の値をどうやったら参照できるのでしょうか? 以下のような感じで記述したのですが、何か特別な書き方があるのでしょうか? わかりにくい質問ですが、ご回答おねがいします。m(_ _)m 簡単なイメージを書きました。 http://www.progoo.com/rental/img_bbs1/img_data/18133_730_30ba642aac.jpg 'メインフォーム Public Class Form1  '★変数testをpublicで宣言   Public test As String=""  '★ロードしたらBackgroundWorker1を動かす   Private Sub Form1_Load() Handles MyBase.Load     BackgroundWorker1.RunWorkerAsync()   End Sub  '★BackgroundWorker1はModule1.test()を動かしてtestに"成功"の文字列を入れる   Private Sub BackgroundWorker1_DoWork() Handles BackgroundWorker1.DoWork     Module1.test()   End Sub  '★フォームを閉じた時に変数testを表示する   Private Sub Form1_closing() Handles MyBase.FormClosing     MsgBox(test)   End Sub End Class '別モジュール Module Module1   Public Sub test()     Form1.test = "成功"   End Sub End Module

  • Excel2007VBAウォッチ式の結果について

    ●質問の主旨 ウォッチ式の「値」と「型」が、自分で作成した場合と参考書例が異なるのは、 どんな原因が考えられるでしょうか?ご存知の方ご教示願います。 ●質問の補足 下記のコードでウォッチウィンドウの操作の学習を行っています。 「ウォッチ式の追加」には以下の通り、入力しています。 ・式 i=3 ・対象 (プロシージャ)lesson3 (モジュール) Module1 ・ウォッチの種類 式がTrueのときに中断 ところがこの状態でマクロを実行し、ウォッチウィンドウを見ると 自分で作成した場合と、参考書例とで「値」と「型」の結果が異なります。 参考書通りにやっているつもりですが、なぜ結果が異なるのか さっぱり分かりません。 (自分) 値→対象範囲外 型→Empty (参考書) 値→True 型→Boolean ●コード Option Explicit Sub lesson3() Dim i As Long For i = 1 To 3 Cells(i, 1) = Worksheets(i).Name Next MsgBox "終了しました" End Sub

  • 【vb.net】クラス化について

    大学で以下のような練習問題を頂きました。 ----- Public Sub test()  Dim a As b = New c  Dim i As Integer = 1  a.disp(i) End Sub 問:この時のbとcを実装せよ。 ----- Public Class c  Public Function disp(ByVal i As Integer) As String   return "iは" & i & "です"  End Function End Class までは書いてみたのですが、b の扱いがどうもわかりません。 どなたか教えていただけませんでしょうか。

  • vb.net Charsメソッドについて

    vs2008、.NET Framework 3.5 にてvb.net の勉強をしているのですが、 下記のような場合にビルドエラーにならないことについて 疑問があります。 Public Class ClassA   Private Sub methodA()     Dim a As String = getString(1) ・・・★   End Sub   Private Function getString() As String     Return "abcdefg"   End Function End ClassA getStringメソッドには引数をとらないもののみが定義 されているので、methodAからgetStringメソッドを呼び出した 場合(★)は、ビルドエラーになると思うのですが、なりません。 a の値は"b"になります。 調べてみたところ、引数に1を設定したことによって、 Charsというメソッドが呼ばれているようなのですが、 それであれば、 Dim a As String = getString().Chars(1) と書くものだと思うのですが…。 こういう書き方もできるんだという話であればそれまでなのですが、 どうも腑に落ちないので、説明できる方がいらっしゃれば 教えていただきたいです。

  • これは参照渡し・値渡ししてる事になりますか?

    Dim a As String Sub マクロ1() a = "test" Call マクロ2 a = Empty End Sub Sub マクロ2() MsgBox a End Sub これは参照渡し・値渡ししてる事になりますか? ByRefやByValを使わない限り、 参照渡しまたは値渡ししてるとは言えないのでしょうか? ご回答よろしくお願いします。

専門家に質問してみよう