Как сделать так, чтобы Mono отображал несколько строк метки с помощью Winforms? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть метод, который создает метку в окне. Этот метод отлично работает в Windows под .Net, но когда я запускаю его на моем RPi с использованием моно, появляется только одна строка.

Есть ли какой-нибудь моно-специфичный код, который я могу использовать, чтобы заставить моно показывать весь текст на этикетке?

private void ShowMessageRight(string strMessage, Color backColor, Color foreColor, Single fontSize = 24f)
{
    if (_lblMessageRight == null)
    {
        _lblMessageRight = new Label();
        this.Controls.Add(_lblMessageRight);
    }
    _lblMessageRight.Text = strMessage;
    _lblMessageRight.BackColor = backColor;
    _lblMessageRight.ForeColor = foreColor;
    _lblMessageRight.Font = new Font(new FontFamily("Microsoft Sans Serif"), fontSize, FontStyle.Bold);
    _lblMessageRight.TextAlign = ContentAlignment.MiddleCenter;
    _lblMessageRight.MaximumSize = new Size(500, 0);
    _lblMessageRight.AutoSize = true;
    _lblMessageRight.Left = (int)((this.ClientSize.Width * 0.75) - (_lblMessageRight.Width / 2));
    _lblMessageRight.Top = (this.ClientSize.Height - _lblMessageRight.Height) / 2;
    _lblMessageRight.BringToFront();
    _lblMessageRight.Show();
}

Результат идентичных вызовов метода.

В Windows с .net This is on Windows

В Linux с Mono (на RPi) This is on the RPi

EDIT:

Итак, я попытался использовать TextRenderer.MeasureText, похоже, это работает, но я очень озадачен, почему. TextRenderer.MeasureText иногда возвращает ширину, которая меньше 500, когда я знаю, что строка длиннее этой. Он вернет высоту, которая в два раза больше высоты шрифта. если я использую это значение в качестве высоты метки, я получаю две строки. TextRenderer.MeasureText, как волшебным образом знает, как долго мне нужен мой ярлык.

    Size SingleLineSize = TextRenderer.MeasureText(strMessage, _lblMessageLeft.Font, new Size(Int32.MaxValue, Int32.MaxValue));
    strMessage = SingleLineSize.Width + strMessage;
    int numberOfLines = (int)Math.Ceiling(SingleLineSize.Width / 500f);
    int lineHeight = SingleLineSize.Height;
    int height = numberOfLines * lineHeight;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...