「覚え間違い」を教えてください!

ラベルの文字列の長さが変わったときに、ラベル位置を自動で変更する方法

環境:Visual Studio 2008 (C#)、Windows 7 Professional (x64)

フォーム上にラベルを配置し、AutoSizeをTrue、AnchorをRightに設定すると、ラベルはフォームの右端に位置するように自動で位置を変更してくれます。
しかし、ラベルの内容を今より長い文字列に設定すると、ラベルの内容はフォームの右端をはみ出してしまい、ラベル全体に対してフォームの右端になるように配置してくれません。

いい方法がございましたら、お教えください。
どうぞよろしくお願いいたします。

A 回答 (2件)

 こんにちは。

補足頂きました。

 Anchorは初期配置する際に、フォーム上の何処へ置くか、AutoSizeはテキストに合わせてラベルの幅が自動的に伸びる様になる、と言ったところではないでしょうか。
 結局、ラベルの幅が増えても位置は固定のままです。

 ラベルを含め、ボタン等のコントロールの素性はチャイルドスタイルのウィンドウを複合して形成されたものです。
 色々とウィンドウを取り扱ってきましたが、ウィンドウの幅を自動変更してくれるのはありますが、ウィンドウの位置まで自動変更してくれるものは見た事がないです。

 .NetFrameworkには色々と都合の好さそうなプロパティが存在するのですが、設定しても期待した通りにはならない事が良くあります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なかなか意図したようには動作しないのですね。

お礼日時:2010/05/27 09:13

 こんばんは。



 ラベルの右端をフォームの右端に合わせたいと言う事でしょうか。
 ラベルにテキストをセットした時に幅を計測して、フォームの右端からはみ出ていたら、ラベルを左に移動して見ては。
 当方の環境は、VisualStudio2008, windows xp 32bitです。以下参考程度に。

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//デタラメに長い文字列を作成する
String s = "";
for (int n = 0; n < 300; ++n)
s += n.ToString() + ",";

//ラベルにセット
this.label1.Text = s;

//ラベルの幅がフォームからはみ出たかどうかを確認
int X = (this.label1.Width + this.label1.Margin.Right) - this.Width;

//はみ出ていたので左へ移動
if(X > 0)
this.label1.Location = new Point(-X, this.label1.Location.Y);
}

}
}

この回答への補足

回答ありがとうございます。
ということは、Anchorはラベルの初期幅を基準にしていて、ラベルの幅が変わってしまうと、Anchorが設定されていても位置は自動で変わらない、ということなんですかね。

補足日時:2010/05/26 14:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報