CStrは文字列への変換関数のようなものらしい。NumBoxに直接文字列を代入すれば表示される文字列に入るようで。書いてもいいんだけど。VBではよく使われるようだしそう紛らわしくもないしいいかなと。VBでグローバル変数はプログラムの何よりも最初で宣言すればいいらしい。IntegerVBでは変数の宣言はDimで書く。BasicでDimといえば配列の宣言に使われるのが相場だが、配列の宣言にも使う。String()を付ければ配列になる。()内に数字を書けば静的に確保されるが、これは後でSplitで得られた配列を入れるのでこれでいい。Integerと書いてるけど、これでInteger型でということを示している。System.Int32、まぁC#で言うところのintと一緒だけど、VB6ではCで言うところのshortに相当する。-32768~23767しか扱えない。Longを使うことが推奨されている。とこれを書いてから知った。そんな値は使わんからこのままでいいが。ちなみにVB.NETでLongはSystem.Int64に相当するのでわけがわからない。Longを使うべしはVB6に対する言葉だ。これでプログラムを書いていたのだが、なぜかフリーズしてしまうことがあった。なんでだろとおもって調べていたら変数名を間違えてたようで。いうのもVBでは変数を宣言出来るけどオリジナルのBasic同様にスカラー変数は宣言せずに使うことが出来る。宣言することが推奨されているけどチェックはしてくれない。チェックして欲しければ最初にこう書いておけばいい。ExplicitちなみにVB.NETではこれは標準で有効らしい。実行するまでエラーが出てこないのが難点ではある。VB6ではデバッグ時はインタプリタとして動作しているようで。サブルーチンを定義しようと思って、こんな風に書いてみた。Subで終わると言うのはVBらしい話ではある。それで呼び出す時ですが、PutOperator()と書いたらおかしいと言われる。PutOperatorと()を付けなければよかったのだがこのときには理由が分からなかった。書いておけばうまく動いた。返り値を出したい時はSubではなくてFunctionを使う。Function返り値をAsで書くのは相変わらず。引数はByValを付けなければ参照渡しになってしまうので、ByValを付けておく方が無難な気がする。返り値は関数名に代入するというのはVerilogのFunctionみたいだな。アリと言えばありだが。返り値があるかないかでSubとFunctionを区別するというのはめんどくさいように見えて合理的かなとも思った。Cでは返り値がないことをvoid型の返り値があると書いているけどどうにもいいわけがましい気がするし。SubとFunctionで宣言が違うことには一定の理解を示したが......後に信じられないことを発見してしまった。エラーを示すためにダイアログを出すことにしてこういうコードを書いた。MsgBox("Error")まぁこれはうまくいったのだが、ダイアログの種類を変えようとこう書いた。