• ベストアンサー

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

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

noname#230227
noname#230227

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

  • ベストアンサー
回答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が設定されていても位置は自動で変わらない、ということなんですかね。

関連するQ&A

  • ラベル内容変更の簡略化がしたい。

     いつもお世話になっております。  エクセル97のVBAで、ユーザーフォーム上に配置されたラベルの内容を書き換えて、ユーザーフォームに表示される文字列を変更するのは、 Label1 = 文字列  と、するだけで良いことは気づいていましたが、今度は大量のラベルの内容を一気に変えたくなり、For文系の命令で添え数字を変化させたい、と思ったのですが、上手くいきません。  ここはどういう風に記述すべきなのでしょうか?  以下の例のようなイメージで、2行目の記述はどうすべきでしょうか? ====================================================================== 例)Label1からLabel100までの内容を、一括変更するマクロ For i = 1 to 100 Label & i = "使用中" Next ======================================================================  よろしくお願いします。

  • ラベル内の文字列にHTMLリンクを張る

    初心者質問ですみません。 フォームにラベルを貼り付け、ラベルのキャプションで設定した 一部の文字列にホームページのアドレスがあるのですが、そこの 部分をHTMLのリンクを張りたいのですが、どのようにすれば よろしいのでしょうか? VBのバージョンは6です。

  • バックスペース機能の作り方

    VBを使ってプログラミングを作りたいのですが、コマンドボタンを押したら、ラベルに書かれた文字列の右端から一文字消していくような機能をつけたいのですが、どのように作ればよいのか教えてください。たとえば、 「0000」を「000 」           ↑           ラベルに書かれた文字列をコマンドボタンをおしてここの文字を消したい。 ちょっとわかりづらいかもしれませんが、よろしくお願いします。 あと、もうひとつあります。2つ以上のフォームで同時に表示させて、なおかつ化さないようにきっちりと配置も決めたいのですが。どの解像度で表示しても同じ位置で表示させたいのですが。

  • Excel VBAのフォーム_ラベルの縦位置

    Excel VBAのフォームを作成しているのですが、 ラベルのキャプションの縦位置が指定できません。 テキストボックスを入力不可の状態にすると、文字が薄いグレーになってしまい、 ラベルにすると表示される文字が上によってしまいます。 ラベルの文字列を下付き文字にするか、テキストボックスのもじれるを黒くする方法を教えてください。 よろしくお願い致します。

  • ステータスバーでテキストを自動スクロールさせる方法

    JavaScriptなどで,ステータスバー上で文字列を自動的にスクロールさせる方法がありますが,Visual Basic.NETをつかって,Windowsフォーム上のステータスバーで同じようなことをさせることは可能でしょうか?

  • グラフの「軸の書式設定」で「文字列を2列」としたとき「縦位置」の配置を「上詰め」にしたい。

    Exel2003でグラフを作っています 項目の文字数が最大30字があるため 「軸の書式設定」の「配置」タブで「縦書き」にし 15字で改行して2列にしたのですが 30字より少ないとき 縦位置の配置が「中央揃え」のようで 2列目が「中央」になってしまいます 縦位置の配置を「上詰め」にしたいのですが その方法をどなたか教えてください。

  • グラフのデータラベルの位置について

    棒グラフで、データラベルを表示させたときに、データらラベルの配置で、ラベルの位置を選択するときに、外側という項目が表示されるときとされないときがあるのはなぜでしょうか?任意でドラッグしてグラフの棒の外側に持ってきてもよいのですが、データ数が多いため自動で一括で外側に配置したいです。 どうぞよろしくお願い致します。

  • VBAでラベルの文字位置について

    VBAでラベルの中央に文字を表示させようとしています。 横位置はTextAlignプロパティで中央表示できたのですが、 縦位置の表示設定はどうしたらできるのでしょうか。 ExcelやAccessのように余白の設定はできないのでしょうか。 初歩的な質問で申し訳ありませんが、調べてもよくわからなかたもので。。 よろしくお願いします。

  • 画面から文字列を取得してその文字列の位置を知る方法

    こんばんは。 質問させてください。 画面から文字列を選択して、取得します。(これは出来ました。) その文字列がHTMLソースファイルの どの位置のものか取得する方法はありますでしょうか? ○番目の「こんばんは」を画面から取得した時に 同じ文字列があっても、○番目の位置が取得出来る方法なのですが・・・ ---- <HTML><HEAD></HEAD> <BODY> おはよう、こんばんは。 さようなら、ありがとう。 しつれいしました、おはよう、こんばんは。 こんばんは、さようなら。 さようなら </BODY> </HTML> ----

  • EXCELで文字列の特定の文字の位置を知る方法

    EXCELで文字列の特定の文字の位置を知る方法 EXCELでセル中の文字列、例えば、"abc 4/3 5/5 6/4" の最後の"/"の位置を知る方法を関数の組み合わせで出来ますか? 教えてください。"/"の数は任意で最後の"/"の位置を知りたいのですが??? どうかよろしくお願いします。VBAでなく関数の組み合わせでお願いします。

専門家に質問してみよう