2010-10-21 4 views
5

Сейчас я уточняю, что это может быть дублированный вопрос от: Right-aligned labels in WinForms Но не ответы удовлетворили меня.WinForms: выравнивание по правому краю

Проблема очень прост:

У меня есть выравнивание по правому краю этикетки с Авторазмером выставиться к истине. Ожидаемое поведение заключается в том, что при увеличении текста правильная координата остается неизменной. Но это не то, что происходит. Левая координата остается неизменной.

Мое приложение небольшое, поэтому я не хочу начинать вводить элементы управления в панели и так далее. Поэтому я пробовал все решения, в которых задействованы ТОЛЬКО свойства метки. Единственный, с кем работал, - установить autoizeize на false и over-size it. (Принято решение вопроса №1692383). Но это действительно уродливо !!! Я бы очень хотел этого избежать.

Любое другое положительное решение?

Заранее благодарен!

+0

см. Мой отредактированный ответ. Исходная версия не работала корректно, когда форма была изменена. –

+0

Tahnks @adrift !!! Я не понял, что первый не сработал. – Diego

ответ

7

Одним из решений было бы, чтобы захватить правый край лейбла в виде конструктора, а в случае метка SizeChanged, сброс местоположения на основе начального правого края, метка Расчетном Width и метка Родителя тока Width.

Это также предполагает, что метка закреплена справа, чтобы изменить размер формы.

private readonly int _rightMargin; 

public Form1() 
{ 
    InitializeComponent(); 

    _rightMargin = label1.Parent.Width - label1.Right; 
} 

private void label1_SizeChanged(object sender, EventArgs e) 
{ 
    label1.Location = new Point(label1.Parent.Width - _rightMargin - label1.Width, label1.Top); 
} 
Смежные вопросы