• ベストアンサー

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

ラベルの文字列の長さが変わったときに、ラベル位置を自動で変更する方法 環境:Visual Studio 2008 (C#)、Windows 7 Professional (x64) フォーム上にラベルを配置し、AutoSizeをTrue、AnchorをRightに設定すると、ラベルはフォームの右端に位置するように自動で位置を変更してくれます。 しかし、ラベルの内容を今より長い文字列に設定すると、ラベルの内容はフォームの右端をはみ出してしまい、ラベル全体に対してフォームの右端になるように配置してくれません。 いい方法がございましたら、お教えください。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

 こんにちは。補足頂きました。  Anchorは初期配置する際に、フォーム上の何処へ置くか、AutoSizeはテキストに合わせてラベルの幅が自動的に伸びる様になる、と言ったところではないでしょうか。  結局、ラベルの幅が増えても位置は固定のままです。  ラベルを含め、ボタン等のコントロールの素性はチャイルドスタイルのウィンドウを複合して形成されたものです。  色々とウィンドウを取り扱ってきましたが、ウィンドウの幅を自動変更してくれるのはありますが、ウィンドウの位置まで自動変更してくれるものは見た事がないです。  .NetFrameworkには色々と都合の好さそうなプロパティが存在するのですが、設定しても期待した通りにはならない事が良くあります。

noname#230227
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

 こんばんは。  ラベルの右端をフォームの右端に合わせたいと言う事でしょうか。  ラベルにテキストをセットした時に幅を計測して、フォームの右端からはみ出ていたら、ラベルを左に移動して見ては。  当方の環境は、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); } } }

noname#230227
質問者

補足

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

すると、全ての回答が全文表示されます。