フォームの右側にあるラベルがフォームにあります。このラベルは動的テキストをロードします。
読み込まれるテキストが長すぎて、テキストがフォームの境界を越える場合があります。つまり、テキストの一部がフォームの外にあります。
ラベルを左から右ではなく、右から左に成長させたい。どうすればこれを達成できますか?
ここでの私の問題は、私のラベルがパネルにあり、何もしなかったことでした。
ラベルをTableLayoutPanel
コントロールに配置し、TableLayoutPanelのRightToLeft
プロパティをTrue
に設定しました。これでうまくいきました。
ラベルを設定してこれを解決しました
AutoSize property to false、
TextAlign to MiddleRight、
アンカーから右へ。
ラベルサイズ自体はテキストに合わせて大きくなるわけではありませんが、コンテンツに合わせて十分な幅を与えることで処理できます。視覚効果は同じです。
「右から左に成長」させることはできませんが、Left
プロパティを割り当てて、フォームから外れないようにすることができます。
label1.Text = "some dynamic text here...";
if (label1.Right > this.Width)
label1.Left = this.Width - label1.Width;
デザインで許可されている場合は、テキストが2行にまたがるように高さを2倍にすることもできます。
TableLayoutPanelまたはその他の互換性のあるコンテナーコントロールを使用できますが、代わりにコンテナーのRightToLeftプロパティを設定し、ラベルにDock = "Right"を設定します。
RightToLeftプロパティを設定しても、必ずしも期待される結果が得られるとは限りません。一部の文字列形式では、文字列が変更されて単語の順序が変更されるためです。
あなたはそれを書くことができます:
public enum Leftorright { left,right}
private Leftorright _LeftToRight = Leftorright.left;
public Leftorright LeftToRight
{
get { return _LeftToRight; }
set { _LeftToRight = value; }
}
protected override void OnTextChanged(EventArgs e)
{
int oldWidth;
oldWidth = this.Width;
base.OnTextChanged(e);
if (LeftToRight == Leftorright.right && this.Width != oldWidth)
{
this.Left = this.Left - this.Width + oldWidth;
}
}
using System.Windows.Forms;
/// <summary>
/// The position of myLabel to the left of the otherControl component when entering
/// text "s".
/// You must set myLabel.AutoSize = true
/// </summary>
/// <param name="s">text</param>
void WriteText(string s)
{
int len = TextRenderer.MeasureText ( s, myLabel.Font ).Width;
myLabel.Left = otherControl.Left - 5 - len;
myLabel.Text = s;
}