なんと、質問1番乗りです。
下記のソースでは、メッセージボックスだと予期したとおりに表示されますが、
ラベルの場合には、スペースが1つ吸収されてしまうようです。
正しい改行の仕方はどうするのでしょうか。
Private Sub Form_Load()
Dim s As String
s = 1 & vbCrLf & 2
MsgBox s
Label1.Caption = s
End Sub
ついでに、Cだと、
for (i=1;i<=10;i++)
printf(%3d %5d\n, i, i*i);
と書く場合、
VBのFormatでは対応できないみたいですが。
1つのラベルに桁をそろえて表示したい場合には、
どのようなやり方がよいのでしょう?
データグリッドを使うべきなのかな。
すみません。読み返したら、環境を書くのを忘れていました。
Win98 & VB6SP5 及び WinXP HomeEdition & VB6SP5 です。
はじめまして、ベーちゃんです。
>下記のソースでは、メッセージボックスだと予期したとおりに表示されますが、
>ラベルの場合には、スペースが1つ吸収されてしまうようです。
>正しい改行の仕方はどうするのでしょうか。
どうやら改行時には先頭のスペースを無視するみたいですね。
逆にいうと
> s = 1 & vbCrLf & 2
としているところを
s = 1 & vbCrLf & Space(1) & 2
として、改行の後ろに必ずスペースを挿入したらどうですか。
>for (i=1;i<=10;i++)
> printf(%3d %5d\n, i, i*i);
>と書く場合、
For i = 0 To 10
Debug.Print Format(i, @@@) & & Format(i * i, @@@@@)
Next i
とすれば桁を揃えられるますよ。
べーちゃん様
回答有り難うございます。
後半部分は納得です。@を使うのでしたか。
前半部分は1行目とそれ以降では、処理を分けるしかないのですかね。
今、自宅なので動作確認できないのですが、そのうち出社したら、
確認します。
Format(i, @@@)の方は、確認できました。ありがとうございました。
スペースの吸収については、どうしてそうなるのかがまだ疑問なので、
もうしばらく、解決のチェックはひかえさせてもらいます。
たいちうさん、ベーちゃんです。
私はマイクロソフトの人間じゃないのでこのコメントは私の
予想以外ではないのですが、おそらく意図的に改行後の
スペースを抜いていると思います。
項目をもし、箇条的に縦に並べるのであれば本来は複数の
ラベルコントロールを並べるのが普通です。
ではどんなときにラベルコントロールで複数行を表示するかと
いえば、通常は長い文章を表示するときに使うのです。
そのようなときに文頭にスペースがくると単語の位置が
後ろにずれますよね(字下がり状態ですね)。
ラベルの先頭行は字上がりで、その下の行が字下がりでは
格好がよくないですよね。
ということでおそらくそのような理由でわざと行頭の
スペースは吸収するようになっているんだと思います。
(見当違いの回答かもしれませんが)
ただ、いずれにせよ簡単なプロパティで解決しないのであれば
プログラム側で吸収するしかないですよね。
べーちゃん様
解説ありがとうございます。
やっぱりプログラム側でスペースを入れるしかなさそうですね。
「うーんVBは使いにくい」と、未熟者がいうのは愚かなことと思い、
提供されたものをうまく使っていけるようになりたいです。
と、いうわけで解決をチェックさせてもらいます。
またよろしくお願いします。
たいちうさん。
既に解決のチェックがついているのに引きずってしまって
すみません。
>「うーんVBは使いにくい」と、未熟者がいうのは愚かなことと思い、
>提供されたものをうまく使っていけるようになりたいです。
「かゆいところに手が届かない」のはある程度仕方のないことですね。
しかし、これを逆に考えるとラベルで複数行の文章を表示したとき
先頭がスペースなら文字列自体は変えずに表示のみ自動的にスペースを
取り除いて単語くれるなんて「親切なヤツ」と考えるのが正しいので
しょう(ホンマかいな)?
VBはとっつきやすさに特化しか開発環境ですので、本来の意図と
異なる使い方をしようとすると、いきなり面倒くさくなってしまう
のはいた仕方ないでしょう。VC++はその点何でもできるんだけれど
逆に全てを自分でやらなければならなくて、それはそれで大変ですけど。
ということで、コントロール関連で思った機能がなければ、
1.コントロールの不都合な部分の回避処理を自前で行う
2.コントロールを自作する
3.市販のコントロールを買う
というのが一般的なアプローチとなるでしょう。
がんばってください。