dim Stg(10) as stringと定義していて、この配列にそれぞれデータが入っている場合、VB6だとイミディエイトで
for a = 1 to 10:?Stg(a):next
とするとStg(1)〜Stg(10)の内容が表示されていましたが、.NETでは構文エラーになります。
.NETで同じ事をしたい場合、どのようにすればいいのでしょうか?
> for a = 1 to 10:?Stg(a):next
a = 1 ではなく、a = 0 なのでは?
> .NETで同じ事をしたい場合、
? Stg
だけで良いかと。Visual Studio のバージョンにもよりますけれども。
ご回答いただきありがとうございます。
>a = 1 ではなく、a = 0 なのでは?
明示的に1〜10を使用したいので、0を使用しないと言うことをよくやる物でこう書きました。
>? Stg
なるほど、配列はこれで全て表示されるのですね。
Visual Studioのバージョンを書いておらず、失礼しました。
2008 Development Editionです。
これが以下の様な構造体の配列だとどうすればよいでしょう?
Public Structure TestType
<VBFixedString(2)> Public Test1 As String
<VBFixedString(2)> Public Test2 As String
<VBFixedString(2)> Public Test3 As String
End Structure
dim Stg(10) as TestType
VB6では
For a = 1 to 10:?a,Stg(a).Test1,Stg(a).Test2,Stg(a).Test3:Next
がイミディエイトで使用できました。
どうも.NETでは「,」も駄目みたいですが。
イミディエイトに表示って
Debug.WriteLineのことですか?
Dim strNo as String = "123"
Debug.WriteLine(strNo)
意図違ったらすみません。strNoをFor~Next使ってstgにかえるとかではないでしょうか。
ループを直接実行させるのは無理だと思います。
メインコードを修正して出力した方が早いでしょう。
どうしても出力させたいなら、Visual Studio マクロを使う手はあります。
たとえば、[ツール]-[マクロ]-[マクロ IDE]の画面から、
Sub test()
Dim win = DTE.ActiveWindow
'イミディエイト ウィンドウをアクティブにする
DTE.Windows.Item("{ECB7191A-597B-41F5-9843-03A4CF275DDE}").Activate()
'イミディエイト ウィンドウをクリアする
DTE.ExecuteCommand("Edit.ClearAll")
'これが、『For n = 0 To 10 : ? Stg(n) : Next』の代用
For n = 0 To 10
Dim s = "Stg(" & CStr(n) & ")"
DTE.Debugger.ExecuteStatement(s, TreatAsExpression:=True)
Next
win.Activate()
End Sub
なんてコードを用意し、[ツール]-[マクロ]-[マクロ エクスプローラ]などから、
デバッグ時に、上記の test マクロを呼び出してやれば、イミディエイト ウィンドウに
{ConsoleApplication1.Module1.TestType}
Test1: "AA"
Test2: "BB"
Test3: "CC"
{ConsoleApplication1.Module1.TestType}
Test1: "DD"
Test2: "EE"
Test3: "FF"
といった出力を展開させる事ができます。手順が煩雑になってしまいますけれどね。
>とーまさん
Debug.WriteLineではありません
>魔界の仮面弁士さん
なるほど、.netではループは使えなくなったんですね。
マクロは知りませんでした。
よく使う場合はこれで代用できそうです。
ありがとうございました。