ラベルコントロールでの改行後のスペース – プログラミング – Home

ラベルコントロールでの改行後のスペース
 
通知
すべてクリア

[解決済] ラベルコントロールでの改行後のスペース


たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

なんと、質問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つのラベルに桁をそろえて表示したい場合には、
どのようなやり方がよいのでしょう?
データグリッドを使うべきなのかな。


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

すみません。読み返したら、環境を書くのを忘れていました。

Win98 & VB6SP5 及び WinXP HomeEdition & VB6SP5 です。


返信引用
べーちゃん
 べーちゃん
(@べーちゃん)
ゲスト
結合: 23年前
投稿: 49
 

はじめまして、ベーちゃんです。

>下記のソースでは、メッセージボックスだと予期したとおりに表示されますが、
>ラベルの場合には、スペースが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

とすれば桁を揃えられるますよ。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

べーちゃん様

回答有り難うございます。

後半部分は納得です。@を使うのでしたか。
前半部分は1行目とそれ以降では、処理を分けるしかないのですかね。

今、自宅なので動作確認できないのですが、そのうち出社したら、
確認します。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

Format(i, @@@)の方は、確認できました。ありがとうございました。

スペースの吸収については、どうしてそうなるのかがまだ疑問なので、
もうしばらく、解決のチェックはひかえさせてもらいます。


返信引用
べーちゃん
 べーちゃん
(@べーちゃん)
ゲスト
結合: 23年前
投稿: 49
 

たいちうさん、ベーちゃんです。

私はマイクロソフトの人間じゃないのでこのコメントは私の
予想以外ではないのですが、おそらく意図的に改行後の
スペースを抜いていると思います。

項目をもし、箇条的に縦に並べるのであれば本来は複数の
ラベルコントロールを並べるのが普通です。
ではどんなときにラベルコントロールで複数行を表示するかと
いえば、通常は長い文章を表示するときに使うのです。
そのようなときに文頭にスペースがくると単語の位置が
後ろにずれますよね(字下がり状態ですね)。
ラベルの先頭行は字上がりで、その下の行が字下がりでは
格好がよくないですよね。
ということでおそらくそのような理由でわざと行頭の
スペースは吸収するようになっているんだと思います。
(見当違いの回答かもしれませんが)

ただ、いずれにせよ簡単なプロパティで解決しないのであれば
プログラム側で吸収するしかないですよね。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

べーちゃん様

解説ありがとうございます。
やっぱりプログラム側でスペースを入れるしかなさそうですね。

「うーんVBは使いにくい」と、未熟者がいうのは愚かなことと思い、
提供されたものをうまく使っていけるようになりたいです。

と、いうわけで解決をチェックさせてもらいます。
またよろしくお願いします。


返信引用
べーちゃん
 べーちゃん
(@べーちゃん)
ゲスト
結合: 23年前
投稿: 49
 

たいちうさん。

既に解決のチェックがついているのに引きずってしまって
すみません。

>「うーんVBは使いにくい」と、未熟者がいうのは愚かなことと思い、
>提供されたものをうまく使っていけるようになりたいです。

「かゆいところに手が届かない」のはある程度仕方のないことですね。
しかし、これを逆に考えるとラベルで複数行の文章を表示したとき
先頭がスペースなら文字列自体は変えずに表示のみ自動的にスペースを
取り除いて単語くれるなんて「親切なヤツ」と考えるのが正しいので
しょう(ホンマかいな)?
VBはとっつきやすさに特化しか開発環境ですので、本来の意図と
異なる使い方をしようとすると、いきなり面倒くさくなってしまう
のはいた仕方ないでしょう。VC++はその点何でもできるんだけれど
逆に全てを自分でやらなければならなくて、それはそれで大変ですけど。

ということで、コントロール関連で思った機能がなければ、
1.コントロールの不都合な部分の回避処理を自前で行う
2.コントロールを自作する
3.市販のコントロールを買う
というのが一般的なアプローチとなるでしょう。

がんばってください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました